在我的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:
AnnotationException
@Index(name = "idx_lower_name", columnList = "lower(name)")
我希望将通过Hibernate + JPA 2.1建立的索引发布到我的项目中。是否可以通过索引注释应用功能?
还是我应该只在部署时运行一个SQL脚本以自己通过SQL添加这些索引?
我可能只是格式化columnList错误,或者可能是我缺少的文档中未描述的字段。
columnList
在JPA 2.1中无法使用基于函数的索引。
JPA提供了从特定数据库进行抽象的方法。每个数据库都有自己的FBI实现,该实现可能会有很大差异。因此,它不是标准的一部分。
我偷看了Hibernate代码,以查看是否有FBI的未记录功能。不幸的是,仅支持基于列的索引。
您应该在部署时运行SQL脚本来创建索引。