如何使用 JPA/hibernate 创建索引并将 MappedSuperClass 中的字段与具体实体中的字段一起使用

2024-01-06

我有@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.creationDate, MyEntity.status and MyEntity.type.

如果我添加@Index(name = "IDX_MYINDEX") to MySuperClass.creationDatehibernate添加了一个索引creationDate到继承自的每个实体MySuperClass.

I tried @AttributeOverride但它不支持索引。

有任何想法吗?


如果您正在使用JPA 2.1那么你可以使用类注释@Table及其属性索引

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

请注意,正如文档所说

仅当表生成有效时才使用这些。默认为无 附加索引。

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

如果您不使用 JPA 2.1,则可以使用旧的Hibernates @Index注释(请注意,这已被弃用)。有属性columnNames您可以在其中传递列名称数组,无论它是在哪个字段之上声明的。

@Index(name = "IDX_MYIDX1", columnNames = { "id", "name", "surname"})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 JPA/hibernate 创建索引并将 MappedSuperClass 中的字段与具体实体中的字段一起使用 的相关文章

随机推荐