9

因此,如果我的 JPA 查询是这样的: Select distinct p from Parent p left join fetch p.children order by p.someProperty

我正确地得到了由 p.someProperty 排序的结果,并且我正确地得到了我的 p.children 集合急切地获取和填充。但我想让我的查询类似于“按 p.someProperty,p.children.someChildProperty 排序”,以便填充在每个父对象中的集合由 someChildProperty 子排序。

当我考虑为这些调用实际生成的 sql 时,这似乎很直观,但当它尝试映射回分层对象时,我猜想更少。

4

3 回答 3

18

为了保持顺序,请使用TreeSet。就 parent 内部集合的排序而言,只需在代码中使用Comparator即可。

好吧,在你的父实体类中的集合定义上试试这个。我希望你明白我的意思。

您可以使用此 JPA 注释,

@javax.persistence.OrderBy(value = "fieldName")

或者这个 Hibernate 特定的,

@org.hibernate.annotations.OrderBy(clause = "FIELD_NAME asc")

你也可以使用这个,

@org.hibernate.annotations.Sort(type = SortType.NATURAL)

或者

@org.hibernate.annotations.Sort(type = SortType.COMPARATOR)

在比较器的情况下,必须有一个比较器。其他可能仅适用于字符串集合。

于 2009-01-03T02:52:47.207 回答
4

如果您使用的是 springboot 和 jpa 这是示例

在父类中添加如下代码

@OneToMany(mappedBy = "user")
@OrderBy(value = "position desc ")
private List<UserAddresses> userAddresses;

在上面的代码中, position 是UserAddresses类中的字段名称,而desc是顺序。您可以像 sql order by 一样传递ascdesc 。

于 2021-05-14T17:44:08.513 回答
1

Adeel 基本上做到了这一点。如果您的集合多次包含相同的实体,您还可以将它们与 List 一起使用,这可能很重要。

于 2009-01-03T04:48:46.693 回答