因此,如果我的JPA查询如下所示:从父级p左连接提取p.子级按p.someProperty排序
我正确地得到了按p.someProperty排序的结果,并且正确地得到了急切地获取和填充的p.children集合。但是我希望我的查询类似于“order by p.someProperty,p.children.someChildProperty”,这样填充到每个父对象中的集合就按someChildProperty进行了子排序。
当我考虑为这些调用实际生成的sql时,这似乎是直观的,但当它试图Map回层次对象时,我猜就不那么直观了。
4条答案
按热度按时间jtjikinw1#
为了保持顺序,使用TreeSet。至于在父级中对集合进行排序,只需在代码中使用Comparator即可。
好吧,在父实体类中的集合定义上试试这个。我希望你明白我的意思。
您可以使用这个JPA注解,
或者这个特定于Hibernate,
你也可以用这个
或
在比较器的情况下,必须有一个比较器。其他的可能只适用于String集合。
ctzwtxfj2#
如果您使用的是springboot和jpa,下面是一个示例
在父类中添加如下代码
在上面的代码中,position是UserAddresses类中的字段名,desc是顺序。您可以像在sql order by中一样传递asc或desc。
5vf7fwbs3#
Adeel基本上已经确定了这一点。你也可以使用那些带有列表的,如果你的集合不止一次包含同一个实体,这可能很重要。
kqlmhetl4#
当调用扩展
org.springframework.data.jpa.repository.JpaRepository
的存储库类中的方法时,可以使用org.springframework.data.domain.Sort
来实现这一点。例如,假设
Teacher
实体是School
的子实体,Student
实体是Teacher
的子实体将先按父实体的
name
属性,然后按子实体的lastName
属性对结果进行排序。注意:将子属性添加到排序中当然会在生成的查询中强制联接到子表。在这种情况下,如果有多个
Student
实体具有相同的lastName
属性,则返回的记录数会更大,除非显式要求不同的记录。