在我的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
错误,或者可能存在我缺少的文档中未描述的字段。
答案 0 :(得分:6)
在JPA 2.1中无法使用基于函数的索引。
JPA提供了从特定数据库中抽象的方法。每个数据库都有自己的FBI实现,可以vary greatly。 因此,它不是标准的一部分。
我深入研究了Hibernate代码,看看FBI是否存在未记录的功能。不幸的是,只有基于列的索引是supported。
您应该在部署时运行SQL脚本来创建索引。