Java 按父对象集合子对象的值排序父对象

Java 按父对象集合子对象的值排序父对象,java,sql,hibernate,hql,Java,Sql,Hibernate,Hql,我正试图按子对象的值对父对象列表进行排序,子对象的值为 一套。假设我有ff: 子女名为rose的父母1 父母2,子女姓名为cameo 父母3,子女姓名:阿巴,泽恩,马克斯 当我对它进行降序排序时,它应该首先显示Parent3,因为它有一个z。 这是我当前的hql,它得到了错误的结果1>2>3: SELECT DISTINCT p FROM Parent p JOIN p.children c ORDER BY c.name desc 如果没有一个distinct,它可以很好地得到它,尽管它选择

我正试图按子对象的值对父对象列表进行排序,子对象的值为 一套。假设我有ff:

子女名为rose的父母1
父母2,子女姓名为cameo
父母3,子女姓名:阿巴,泽恩,马克斯

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

SELECT DISTINCT p FROM Parent p JOIN p.children c ORDER BY c.name desc
如果没有一个distinct,它可以很好地得到它,尽管它选择了多个相同的父对象

我的模型设置如下所示:

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

 public class Child{
  private String name;

 }
公共类父类{
private Set children=new HashSet();
}
公营儿童{
私有字符串名称;
}
编辑:虽然当两个父项都有相同的children.name值时,它不会比较下一个可能的值,但仍对其进行排序。即

如果Parent1有孩子abba,zeon
Parent2有孩子abba,cameo

升序应该优先考虑Parent2

如果不想复制父对象,则不能使用集合。您可以做的是选择父级,然后再选择每个父级中的max元素(字母组合),并按其排序

围绕这条线的东西

select p from Parent p 
where p.maxChild = 
     (select max(c.name) from Child c where c.parentID=p.parentID)
如果需要,可以使用@Formula映射max元素。因此,根本没有必要使用集合


实际上,使用公式可能更好,您可以直接映射最大名称和顺序,而无需获取集合。

如果您不想复制父级,则不能使用集合。您可以做的是选择父级,然后再选择每个父级中的max元素(字母组合),并按其排序

围绕这条线的东西

select p from Parent p 
where p.maxChild = 
     (select max(c.name) from Child c where c.parentID=p.parentID)
如果需要,可以使用@Formula映射max元素。因此,根本没有必要使用集合


事实上,配方奶粉可能会更好,您可以通过它直接映射最大名称和顺序,而无需获取集合。

看起来这已经在Hope中得到了回答helps@Jorge谢谢,虽然如果父母双方都有相同的子项。名称值,它不会比较下一个名称值,即双方都有一个名为acacia的子项,假设升序,它会比较比较下一个值,直到找到可能的最早值(如果有),看起来这已经在希望中得到了回答helps@Jorge谢谢,虽然如果父母双方都有相同的子项。名称值它不会比较下一个名称值,即双方都有一个名为acacia的子项,假设升序,它会比较下一个名称值值,直到找到可能的最早值(如果有)