Java 休眠:何时使用@Index注释

Java 休眠:何时使用@Index注释,java,sql,oracle,hibernate,Java,Sql,Oracle,Hibernate,在我的场景中,我有一个模式生成脚本来创建表和所需的索引。我想知道是否也需要在hibernate实体中定义@Index注释,如果需要,为什么 脚本: create table issues (id, project_id, .., status_id) create index idx_issues_projid on issues (project_id) @Table(name="issues") public class DBIssue { .. @ManyToOne(fetch

在我的场景中,我有一个模式生成脚本来创建表和所需的索引。我想知道是否也需要在hibernate实体中定义
@Index
注释,如果需要,为什么

脚本:

create table issues (id, project_id, .., status_id)

create index idx_issues_projid on issues (project_id)
@Table(name="issues")
public class DBIssue {

..
  @ManyToOne(fetch = FetchType.EAGER)
  @JoinColumn(name = "PROJECT_ID")
  @Index(name="INDEX_TFW_ISSUE_PROJECT_ID")
  private DBProject project;
}
实体:

create table issues (id, project_id, .., status_id)

create index idx_issues_projid on issues (project_id)
@Table(name="issues")
public class DBIssue {

..
  @ManyToOne(fetch = FetchType.EAGER)
  @JoinColumn(name = "PROJECT_ID")
  @Index(name="INDEX_TFW_ISSUE_PROJECT_ID")
  private DBProject project;
}
休眠配置:

create table issues (id, project_id, .., status_id)

create index idx_issues_projid on issues (project_id)
@Table(name="issues")
public class DBIssue {

..
  @ManyToOne(fetch = FetchType.EAGER)
  @JoinColumn(name = "PROJECT_ID")
  @Index(name="INDEX_TFW_ISSUE_PROJECT_ID")
  private DBProject project;
}
关闭


我猜您是在询问Hibernate
@Index
注释,它基本上已经导入到JPA2.1中。您可以在任何地方使用
@Index
,否则您会主动告诉关系数据库为列编制索引,主要是在您知道将要进行大量查找的字段上。例如,在这种情况下,您可能希望“经常选择属于特定
DBProject
DBIssue
s,这样在包含
DBIssue
的表中为该列编制索引是有意义的。我理解这一点,但如果我已经在数据库中为所需列创建了索引。在hibernate实体中配置相同的组件有什么好处吗?如果我省略这个注释,有什么坏处吗?这个注释告诉Hibernate(或JPA2.1提供程序)在生成模式时创建索引。代码中没有明确的需要包含它,但它是很好的文档,可以确保如果需要重新生成DDL,索引将自动附加。