我有@MappedSuperClass(简化示例):
@MappedSuperClass
@MappedSuperclass public abstract class MySuperClass { @Id @GeneratedValue private long id; @Column(nullable = false) private Date creationDate; // ... }
和一个具体的Entity(简化示例):
Entity
@Entity public class MyEntity extends MySuperClass { @Index(name = "IDX_MYINDEX") @Column(nullable = false) @Enumerated(EnumType.STRING) private MyType type; @Index(name = "IDX_MYINDEX") @Column(nullable = false) @Enumerated(EnumType.STRING) private MyResult status; // ... }
现在我需要包括列的索引MySuperClass.creationDate,MyEntity.status和MyEntity.type。
MySuperClass.creationDate
MyEntity.status
MyEntity.type
如果我添加@Index(name = "IDX_MYINDEX")到MySuperClass.creationDatehibernate中,则会creationDate向继承自的每个Entity 添加一个索引MySuperClass。
@Index(name = "IDX_MYINDEX")
creationDate
MySuperClass
我试过了,@AttributeOverride但是它不能用于索引。
@AttributeOverride
有任何想法吗?
如果正在使用,JPA 2.1则可以将类注释@Table及其属性索引一起使用
JPA 2.1
@Table
@Table(indexes = { @Index(name = "IDX_MYIDX1", columnList = "id,name,surname") })
请注意,如文档所述
仅当表生成有效时才使用它们。默认为无其他索引。
columnlist,如上所示,接受列名列表作为逗号分隔的列表。
columnlist
如果您不使用JPA 2.1,则可以使用old Hibernate的@Index注释(请注意,此注释已被弃用)。有一个属性columnNames,无论在哪个字段上方声明,都可以传递列名称数组。
Hibernate
@Index
columnNames
@Index(name = "IDX_MYIDX1", columnNames = { "id", "name", "surname"})