这是我的模特。
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为我生成这个索引?
谢谢!
答案 0 :(得分:2)
尝试@Index注释。
@Index(name="user_type_index")
还有一个@IndexColumn注释用于连接表,但它似乎并没有实际创建索引,而是控制哪个字段定义列表语义中的顺序。
此上下文中的@Index列似乎确实在连接表上创建了一个索引。
答案 1 :(得分:1)
我正在处理一个类似的问题,我发现有些方言会自动索引外键,而其他方言则不会。
Hibernate Dialect类和所有不覆盖getAddForeignKeyConstraintString方法(Oracle,SQL Server等)的子类都不会在外键上创建索引。
MySQLDialect会覆盖该方法并为每个外键添加索引