一尘不染

如何使用JPA /休眠创建索引,以及如何使用MappedSuperClass中的字段以及具体实体中的字段

hibernate

我有@MappedSuperClass(简化示例):

@MappedSuperclass
public abstract class MySuperClass {

    @Id
    @GeneratedValue
    private long id;

    @Column(nullable = false)
    private Date creationDate;

    // ...
}

和一个具体的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.creationDateMyEntity.statusMyEntity.type

如果我添加@Index(name = "IDX_MYINDEX")MySuperClass.creationDatehibernate中,则会creationDate向继承自的每个Entity
添加一个索引MySuperClass

我试过了,@AttributeOverride但是它不能用于索引。

有任何想法吗?


阅读 392

收藏
2020-06-20

共1个答案

一尘不染

如果正在使用,JPA 2.1则可以将类注释@Table及其属性索引一起使用

@Table(indexes = { @Index(name = "IDX_MYIDX1", columnList = "id,name,surname") })

请注意,如文档所述

仅当表生成有效时才使用它们。默认为无其他索引。

columnlist,如上所示,接受列名列表作为逗号分隔的列表。

如果您不使用JPA 2.1,则可以使用old
Hibernate@Index注释(请注意,此注释已被弃用)。有一个属性columnNames,无论在哪个字段上方声明,都可以传递列名称数组。

@Index(name = "IDX_MYIDX1", columnNames = { "id", "name", "surname"})
2020-06-20