按其设置的孩子的值对父对象进行排序
问题描述:
我想按其子集 的值对父对象列表进行排序。所以我们可以说我有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。
答
如果你不想重复父母,你不能做一个集合。你可以做的是选择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元素。所以根本不需要使用集合。
实际上,对于公式可能会更好,您可以通过它直接映射最大名称和顺序,而无需获取集合。
看起来这已经在[hql-order-by-within-a-collection]中得到了解答(https://stackoverflow.com/questions/666423/hql-order-by-within-a-collection)希望这帮助 –
@Jorge谢谢你这个作品,虽然如果父母双方有相同的children.name值,它不会比较下一个名字的值,即都有一个名为acacia的子女,按升序排列,它会比较下一个值,直到找到可能的最早值if有任何 – Rian