按父集对象的值对父对象进行排序

时间:2017-08-31 18:29:09

标签: java sql hibernate hql

我试图按其子对象的值对父对象列表进行排序 一套。所以,让我说我有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。

1 个答案:

答案 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映射最大元素。因此,根本不需要使用集合。

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