1

我在添加索引时遇到问题。我使用带有注释驱动配置的休眠。

我有这样的事情:

@MappedSuperclass
public abstract class BaseEntity {
   @Id
   private String id;
   private String profileId;
   ...
   //getters and setters
}

和几个孩子班

@Table(name="note")
public abstract class Note extends BaseEntity{
    //different fields
}
@Table(name="message")
public abstract class Message extends BaseEntity{
    //different fields
}

我想为类 BaseEntity 中的字段“profileId”添加索引。但是如果我这样做,使用注释@Index(name =“profileid_index”),它只会为表“note”创建,并且在“message”上失败,因为索引“profileid_index”已经存在。

我没有找到办法,如何让hibernate生成唯一的索引名称。或者可能有人知道如何在父类中索引字段的另一种解决方案。

4

1 回答 1

0

您是否看过@Tables 注释:http ://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/ ?

您可以执行以下操作:

@Tables(value={@Table(appliesTo="table1", indexes={@Index(name="index1", columnNames={"column1", "column2"})}),  
           @Table(appliesTo="table2", indexes={@Index(name="index1", columnNames={"column1", "column2"})})})

如果您将此注释放在@MappedSuperclass 中,应该对您有所帮助,尽管我不知道是否有更清洁的解决方案

更准确地说,你可以尝试你的情况:

@Tables(value={@Table(appliesTo="note", indexes={@Index(name="index_profile_id1", columnNames={"profileId"})}),  
           @Table(appliesTo="message", indexes={@Index(name="index_profile_id2", columnNames={"profileId"})})})
于 2013-08-16T12:13:07.343 回答