我试图按其子对象的值对父对象列表进行排序 一套。所以,让我说我有ff:
Parent1,子女名称为rose
Parent2有孩子名字客串
Parent3,子项名称为abba,zeon,max。
当我按降序排序时,它应首先显示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;
}
编辑:管理以对其进行排序HQL order by within a collection尽管父母双方都拥有相同的children.name值,但它并不会比较下一个可能的值。即。
如果Parent1有孩子abba,zeon
Parent2有孩子abba,cameo
升序将首先优先考虑Parent2。
答案 0 :(得分:0)
如果您不想复制父级,则无法使用集合执行此操作。你可以做的是选择Parent并在每个Parent中按顺序选择max element(alphabeticaly)并按顺序排序。
围绕这些界限。
select p from Parent p
where p.maxChild =
(select max(c.name) from Child c where c.parentID=p.parentID)
如果您愿意,可以使用@Formula映射最大元素。因此,根本不需要使用集合。
使用公式可能会更好,您可以直接映射最大名称和顺序,而无需提取集合。