一尘不染

JPA 2.1具有功能的列的索引注释

hibernate

在我的Hibernate项目中,我像这样添加索引:

@Entity
@Table(name="MY_TABLE", indexes = {
    @Index(name = "idx_user_name", columnList = "name"),
    @Index(name = "idx_user_email", columnList = "email")
})

哪个工作正常,但是当我想要建立这样的索引时会发生什么:

CREATE INDEX ON my_table (lower(name));

如果使用以下注释,则会得到AnnotationException

@Index(name = "idx_lower_name", columnList = "lower(name)")

我希望将通过Hibernate + JPA 2.1建立的索引发布到我的项目中。是否可以通过索引注释应用功能?

还是我应该只在部署时运行一个SQL脚本以自己通过SQL添加这些索引?

我可能只是格式化columnList错误,或者可能是我缺少的文档中未描述的字段。


阅读 312

收藏
2020-06-20

共1个答案

一尘不染

在JPA 2.1中无法使用基于函数的索引。

JPA提供了从特定数据库进行抽象的方法。每个数据库都有自己的FBI实现,该实现可能会有很大差异。因此,它不是标准的一部分。

我偷看了Hibernate代码,以查看是否有FBI的未记录功能。不幸的是,仅支持基于列的索引。

您应该在部署时运行SQL脚本来创建索引。

2020-06-20