如何让Hibernate在外键(JoinColumn)上创建索引?

时间:2010-03-25 05:58:19

标签: hibernate foreign-keys indexing

这是我的模特。

class User {

   @CollectionOfElements 
    @JoinTable(name = "user_type", joinColumns = @JoinColumn(name = "user_id"))
    @Column(name = "type", nullable = false)
  private List<String> types = new ArrayList<String>();

}

您可以想象会有一个名为“user_type”的表,它有两列,一列是“user_id”,另一列是“type”。

当我使用hbm2ddl生成ddls时,我可以使用此表以及“user_id”上的外键约束。但是,此列没有此索引。我需要这个索引。我怎样才能让hibernate为我生成这个索引?

谢谢!

2 个答案:

答案 0 :(得分:2)

尝试@Index注释。

@Index(name="user_type_index")

还有一个@IndexColumn注释用于连接表,但它似乎并没有实际创建索引,而是控制哪个字段定义列表语义中的顺序。

此上下文中的@Index列似乎确实在连接表上创建了一个索引。

答案 1 :(得分:1)

我正在处理一个类似的问题,我发现有些方言会自动索引外键,而其他方言则不会。

Hibernate Dialect类和所有不覆盖getAddForeignKeyConstraintString方法(Oracle,SQL Server等)的子类都不会在外键上创建索引。

MySQLDialect会覆盖该方法并为每个外键添加索引