Hibernate:何时使用@Index注释

har*_*rsh 4 java sql oracle hibernate

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

脚本:

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

create index idx_issues_projid on issues (project_id)
Run Code Online (Sandbox Code Playgroud)

实体:

@Table(name="issues")
public class DBIssue {

..
  @ManyToOne(fetch = FetchType.EAGER)
  @JoinColumn(name = "PROJECT_ID")
  @Index(name="INDEX_TFW_ISSUE_PROJECT_ID")
  private DBProject project;
}
Run Code Online (Sandbox Code Playgroud)

Hibernate配置:

<property name="hibernate.hbm2ddl.auto">off</property>

chr*_*ke- 6

我假设您在询问Hibernate @Index注释,该注释基本上已导入JPA 2.1.您可以@Index在任何地方使用,否则主动告诉关系数据库索引列,主要是在您知道要进行大量查找的字段上.在这种情况下,例如,您可能想要" 经常选择DBIssue属于特定的s DBProject,因此在表格中对该列进行索引是有意义的DBIssue.

  • 我理解这一点,但如果我已经在数据库中创建了所需列的索引.在hibernate实体中配置相同有什么好处吗?如果我省略这个注释是否有任何缺点? (2认同)
  • 此注释告诉 Hibernate(或 JPA 2.1 提供程序)在生成架构时创建索引。没有明确需要将其包含在代码中,但它是很好的文档,并且将确保如果您需要重新生成 DDL,索引将自动附加。 (2认同)