在JPA查询中排序返回Child对象

时间:2009-01-02 21:15:22

标签: java hibernate jpa

所以如果我的JPA查询是这样的: 通过p.someProperty

从Parent p left join fetch p.children order中选择distinct p

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

当我考虑实际为这些调用生成的sql时,这看起来很直观,但我想在尝试映射回分层对象时不那么直接。

3 个答案:

答案 0 :(得分:15)

要保留订单,请使用TreeSet。至于父类内部集合的排序,只需使用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)

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

答案 1 :(得分:2)

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

在父类中添加如下代码

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

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

答案 2 :(得分:1)

Adeel基本上已经钉了这个。如果您的集合多次包含同一个实体,您也可以使用那些可能很重要的List。