【问题标题】:JPA/Hibernate @OrderBy annotation with multiple columns and ASC/DESC for eachJPA/Hibernate @OrderBy 注释,具有多列和每个列的 ASC/DESC
【发布时间】:2017-02-07 09:04:55
【问题描述】:

我想使用@OrderBy 注释对包含多个列的 OneToMany 字段进行排序,并为每个字段指定排序顺序,但我似乎无法在任何地方找到有关如何或是否不可能的信息。 注释的规格说:

orderby_list::= orderby_item [,orderby_item]*
orderby_item::= property_or_field_name [ASC | DESC]

所以我猜这是不可能的,但我还是更愿意问。

在部署时添加以下内容会引发 HibernateException:

@OrderBy("field1 DESC, field2 DESC, field3 DESC, field4 DESC")

生成:

Caused by: org.hibernate.HibernateException: Unable to parse order-by fragment

谢谢

【问题讨论】:

  • 是“column1”、“column2”等列吗?还是FIELDS?
  • 抱歉,字段名称
  • 好的,所以您的 JPA 提供商根据此处提供的信息存在问题,您应该向他们提出问题
  • 好的,进一步检查。感谢您的帮助

标签: jpa hibernate-annotations jpa-annotations


【解决方案1】:

如果你有一个类 Person 有 2 个字段,firstNamelastName,那么你可以通过查询来做

SELECT p FROM Person p ORDER BY p.firstName ASC, p.lastName DESC

这是 JPQL BNF 所说的。

当您拥有Person 对象的列表时,您可以像这样定义列表排序(相同的语法)

@OneToMany
@OrderBy("firstName ASC, lastName DESC")
List<Person> myList;

【讨论】:

  • 谢谢,但我不是在谈论查询,而是专门谈论注释。我希望 OneToMany 中的集合在获取时对其进行排序。
  • 我已经尝试过了,但在部署应用程序时出现解析错误:“org.hibernate.HibernateException: Unable to parse order-by fragment”。我会更新我的帖子。
  • 这就是 JPA 规范定义的内容,也是我使用的 JPA 提供者接受的内容,因此建议您向您的 JPA 提供者提出问题
  • 原来问题是由我必须排除的 antlr 依赖引起的。无论如何,我接受了你的回答,因为我正在四处寻找语法确实正确的确认。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-06
  • 1970-01-01
  • 2014-11-20
  • 1970-01-01
  • 2019-01-17
  • 2020-02-19
  • 1970-01-01
相关资源
最近更新 更多