t77*_*777 19 java hibernate jpa
我有@MappedSuperClass(简化的例子):
@MappedSuperclass
public abstract class MySuperClass {
@Id
@GeneratedValue
private long id;
@Column(nullable = false)
private Date creationDate;
// ...
}
Run Code Online (Sandbox Code Playgroud)
和具体的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;
// ...
}
Run Code Online (Sandbox Code Playgroud)
现在我需要包括列的索引MySuperClass.creationDate,MyEntity.status和MyEntity.type.
如果我添加@Index(name = "IDX_MYINDEX")到MySuperClass.creationDatehibernate,则为creationDate每个继承的Entity 添加一个索引MySuperClass.
我试过@AttributeOverride但它不能用于索引.
有任何想法吗?TIA!
Mac*_*ski 55
如果您正在使用,JPA 2.1则可以使用类注释@Table及其属性索引
@Table(indexes = { @Index(name = "IDX_MYIDX1", columnList = "id,name,surname") })
Run Code Online (Sandbox Code Playgroud)
请注意,正如文档所述
这些仅在表生成有效时使用.默认为无其他索引.
columnlist,如上所示,接受列名列表作为逗号分隔列表.
如果您不使用JPA 2.1,则可以使用旧Hibernate的@Index注释(请注意,这已被弃用).有一个属性columnNames,您可以传递列名称数组,无论它在哪个字段上声明.
@Index(name = "IDX_MYIDX1", columnNames = { "id", "name", "surname"})
Run Code Online (Sandbox Code Playgroud)
小智 5
使用@Index 注释并使用参数“columnList”来设置应该使用哪些列来制作索引。该列表应由逗号分隔的列名值列表组成。
重要提示:不要忘记将列名属性(通过 Column 注释)添加到创建此索引的所有属性中,否则在启动容器时会出现错误。
| 归档时间: |
|
| 查看次数: |
41463 次 |
| 最近记录: |