带有函数的列的JPA 2.1索引注释

ros*_*hal 5 java hibernate jpa

在我的Hibernate项目中,我添加如下索引:

@Entity
@Table(name="MY_TABLE", indexes = {
    @Index(name = "idx_user_name", columnList = "name"),
    @Index(name = "idx_user_email", columnList = "email")
})
Run Code Online (Sandbox Code Playgroud)

哪个工作得很好,但是当我想制作这样的索引时会发生什么:

CREATE INDEX ON my_table (lower(name)); 
Run Code Online (Sandbox Code Playgroud)

如果我使用以下注释,我得到一个AnnotationException:

@Index(name = "idx_lower_name", columnList = "lower(name)")
Run Code Online (Sandbox Code Playgroud)

我希望通过Hibernate + JPA 2.1制作索引来发布我的项目.是否可以通过索引注释应用函数?

或者我应该在部署时运行SQL脚本以通过SQL自己添加这些索引?

我可能只是格式化columnList错误,或者可能存在我缺少的文档中没有描述的字段.

Kam*_*kol 6

在JPA 2.1中不可能使用基于函数的索引.

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

我深入研究了Hibernate代码,看看FBI是否存在未记录的功能.不幸的是,只支持基于列的索引.

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