2017-08-31 44 views
1

我想按其子集 的值对父对象列表进行排序。所以我们可以说我有FF:按其设置的孩子的值对父对象进行排序

Parent1带小孩的名字上涨
Parent2带小孩的名字客串
Parent3与ABBA,吉翁,最大的孩子的名字。

当我对它降序排序时,它应该首先显示Parent3,因为它具有z。 这是我目前HQL它得到的1> 2> 3一个错误的结果:

SELECT DISTINCT p FROM Parent p JOIN p.children c ORDER BY c.name desc 

没有明显的,它得到它就好了,虽然它选择多个相同的父母。

我有一个模型设置如下图所示:

public class Parent { 
private Set<Child> children = new HashSet<Child>(); 
} 

public class Child{ 
    private String name; 

} 

编辑:托管尽管当父母双方都有相同的children.name价值,它并不比下一个可能值对它进行排序HQL order by within a collection。即

如果Parent1有孩子的阿爸,吉恩
Parent2有孩子的阿爸,客串
升序首先应该优先Parent2。

+1

看起来这已经在[hql-order-by-within-a-collection]中得到了解答(https://stackoverflow.com/questions/666423/hql-order-by-within-a-collection)希望这帮助 –

+0

@Jorge谢谢你这个作品,虽然如果父母双方有相同的children.name值,它不会比较下一个名字的值,即都有一个名为acacia的子女,按升序排列,它会比较下一个值,直到找到可能的最早值if有任何 – Rian

回答

0

如果你不想重复父母,你不能做一个集合。你可以做的是选择Parent并在每个Parent中选择max元素(alphabeticaly)并按顺序排序。

围绕这些线条的东西。

select p from Parent p 
where p.maxChild = 
    (select max(c.name) from Child c where c.parentID=p.parentID) 

如果需要,您可以使用@Formula映射max元素。所以根本不需要使用集合。

实际上,对于公式可能会更好,您可以通过它直接映射最大名称和顺序,而无需获取集合。

相关问题