具有 DESC 顺序的 Hibernate 索引

Hibernate index with DESC order

有没有一种方法可以创建具有 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 被忽略。我正在使用:

休眠 4.3.10 休眠 JPA 2.1 api

谢谢。

根据定义 - 即 the JPA specification¹ 文档又名 JSR 338 - 有一种方法可以注释所需的行为,正如您在问题中所描述的那样。引用规范,第 11.1.23 节索引注释,第 452 页:


The @Index annotation is used in schema generation. [..] the Index annotation may be used to specify the ordering of the columns in the index for the primary key.

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

The syntax of the columnList element is a column_list, as follows:

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

The persistence provider must observe the specified ordering of the columns.

If ASC or DESC is not specified, ASC (ascending order) is assumed.


结论

任何持久性提供程序都必须(应该)遵守此要求以符合 JPA 规范。因此,我可以想象 4.3.10 版中的 Hibernate 要么 (a) 存在错误,要么 (b) 不遵守该特定点的规范。

想法

  • 使用较新的版本再试一次,比如 Hibernate 5+,例如current release 5.4.21
  • 尝试使用另一个 JPA 提供程序,比如 EclipseLink or OpenJPA
  • 检查您编译的 类 是否 run/tested 具有正确的语法。也许,他们可能 run/tested 版本过时了?

希望对您有所帮助。

脚注

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