带有DESC顺序的休眠索引

vil*_*iam 5 java indexing hibernate jpa 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")
  }
)
Run Code Online (Sandbox Code Playgroud)

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

Hibernate 4.3.10 Hibernate JPA 2.1 API

谢谢。

MWi*_*ner 0

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

\n
\n
\n

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

\n
\n
@Target({}) @Retention(RUNTIME)\npublic @interface Index {\n String name() default "";\n String columnList();\n boolean unique() default false;\n}\n
Run Code Online (Sandbox Code Playgroud)\n
\n

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

\n
\n
column::= index_column [,index_column]*\nindex_column::= column_name [ASC | DESC]\n
Run Code Online (Sandbox Code Playgroud)\n
\n

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

\n
\n
\n

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

\n
\n
\n

结论

\n

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

\n

想法

\n
    \n
  • 使用更新的版本重试,例如 Hibernate 5+,例如当前版本 5.4.21
  • \n
  • 尝试使用其他 JPA 提供程序,例如EclipseLinkOpenJPA
  • \n
  • 检查编译的类是否使用正确的语法运行/测试。也许,它们可能已使用过时的版本运行/测试?
  • \n
\n

希望能帮助到你。

\n

脚注

\n

\xc2\xb9 在2.2版本或之前的2.1/2.0版本中

\n