带有DESC顺序的Hibernate索引

时间:2016-08-22 09:34:56

标签: java hibernate jpa indexing jpa-2.1

有没有办法用一个具有DESC顺序的列创建多列索引?我试过这个(来自javax.persistence包的注释):

@Table(name = some_table
  indexes = {
    @Index(name = "idx_multi_column", columnList = "column1, column2, column3"),
    @Index(name = "idx_multi_column", columnList = "column1, column2, column3 DESC")
  }
)

但它使用 column3 asc 创建两个索引 - 忽略DESC。我正在使用:

Hibernate 4.3.10 Hibernate JPA 2.1 api

感谢。

1 个答案:

答案 0 :(得分:1)

根据定义-即the JPA specification¹文档,又称JSR 338-可以按照您在问题中所描述的方式来注释所需的行为。从规范中引用 11.1.23索引注释,第452页,


  

@Index批注用于模式生成。 [..]索引注释   可以用来指定主键索引中列的顺序。

@Target({}) @Retention(RUNTIME)
public @interface Index {
 String name() default "";
 String columnList();
 boolean unique() default false;
}
  

columnList元素的语法为column_list,如下所示:

column::= index_column [,index_column]*
index_column::= column_name [ASC | DESC]
  

持久性提供程序必须遵守列的指定顺序。

     

如果未指定 ASC DESC ,则假定为 ASC (升序)。


结论

任何持久性提供者都必须(应该)遵守此要求,以符合JPA规范。因此,我可以想象Hibernate在4.3.10版本中确实(a)遭受了错误的困扰,或者(b)在特定方面没有遵守规范。

想法

  • 尝试使用最新版本,例如Hibernate 5+。 current release 5.4.2
  • 尝试使用另一个JPA提供者,例如EclipseLinkOpenJPA
  • 检查编译的类是否已使用正确的语法运行/测试。也许它们已经使用过时的版本运行/测试过?

希望有帮助。

脚注

¹在2.2版或之前的2.1 / 2.0版中