java - @Enumerated 字段上的 Hibernate @Index 不起作用

标签 java hibernate orm indexing

我正在使用 Hibernate 与我的数据库对话。我有一个枚举字段,它将用于慢速查询。所以我想索引它。我在该字段上添加了以下注释:

@Column(name="RIGHT_TYPE", unique=false, nullable=false, length=10)
@Enumerated(EnumType.STRING)
@Index(name = "ABC_INDEX")
protected RightType rightType;

但是,我没有看到在该字段上创建任何索引。

我正在使用 org.hibernate.dialect.Oracle9Dialect。 (修剪下来的)ddl 是:

create table DOCUMENTS (documentID varchar2(255 char) not null, owner_principalId varchar2(255 char), primary key (documentID))
create table DOC_RIGHTS (document raw(255) not null, primary key (document))
create table PRINCIPAL (TYPE varchar2(31 char) not null, principalId varchar2(255 char) not null, displayName varchar2(255 char), primary key (principalId))
create table PRINCIPAL_RIGHTS (id varchar2(255 char) not null, PRINCIPAL_ID varchar2(255 char) unique, DOCUMENT_RIGHT_ID raw(255) unique, primary key (id))
create table RIGHTS (TYPE varchar2(31 char) not null, id number(19,0) not null, RIGHT_TYPE varchar2(10 char) not null, PRINCIPAL_RIGHT_ID varchar2(255 char) unique, primary key (id))
create table ROLE_MAP (PRINCIPAL_ID varchar2(255 char) not null, ROLE_ID varchar2(255 char) not null)
alter table DOCUMENTS add constraint FKDC2BB35E362547 foreign key (owner_principalId) references PRINCIPAL
create index PRINCIPAL_INDEX on PRINCIPAL_RIGHTS (PRINCIPAL_ID)
alter table PRINCIPAL_RIGHTS add constraint FKB32239ADFB30571B foreign key (PRINCIPAL_ID) references PRINCIPAL
alter table PRINCIPAL_RIGHTS add constraint FKB32239ADE1F0C813 foreign key (DOCUMENT_RIGHT_ID) references DOC_RIGHTS
create index RIGHT_TYPE_INDEX on RIGHTS (RIGHT_TYPE)
alter table RIGHTS add constraint FKF34FBA9CA09D6215 foreign key (PRINCIPAL_RIGHT_ID) references PRINCIPAL_RIGHTS
alter table ROLE_MAP add constraint FKA413CD78FB30571B foreign key (PRINCIPAL_ID) references PRINCIPAL
alter table ROLE_MAP add constraint FKA413CD7883A04939 foreign key (ROLE_ID) references PRINCIPAL
create sequence RIGHTS_SEQUENCE

但如果我愿意,我可以手动创建一个。这是为什么?有什么方法可以强制 Hibernate 实现它吗?

最佳答案

这似乎与您提出的问题一样有效。我创造了一点 test app这证明了它在独立应用程序中的工作。

我正在发生的一件事是 hibernate 将不会尝试在更新操作期间创建索引。它将从头开始创建它们 hbm2ddl=create 但不会在更新期间创建。 hibernate 团队对此被报告为错误的标准响应是“hbm2ddl 仅用于开发,因此不需要索引,您应该找 DBA。”

如果这是问题所在,我个人的建议是开始使用 liquibase管理索引之类的创建。

关于java - @Enumerated 字段上的 Hibernate @Index 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2537378/

相关文章:

java - App Engine 1.7 升级时出现 Junit EntityManager NullPointerException

java - Spring、Hibernate、JPA、ManyToOne 添加了 where 子句或 Differentiator 列,但没有继承

python - Django 开发是否提供真正灵活的 3 层架构?

hibernate - Grails具有许多值为0的条件

java - 如何在 Hibernate 删除操作中获取对象的类

python - 在 SQLAlchemy ORM 中,如何获取在 session.query().group_by() 中使用的主键列?

java - org.hibernate.exception.SQLGrammarException : could not prepare statement

java - 在运行时获取对象的引用数量

java - 可执行 jar 文件中的 BeanDefinitionParsingException

MySQL:如何获得一个字段与前一个字段相比的变化百分比