java - 按父对象设置的子对象的值对父对象进行排序

标签 java sql hibernate hql

我正在尝试按其子对象的值对父对象列表进行排序,该值是 一套。假设我有 ff:

parent 1的 child 名字是rose
Parent2 与 child 的名字客串
Parent3 的 child 名字为 abba、zeon、max。

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

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

没有一个不同的,它得到它很好,尽管它选择了多个相同的 parent 。

我的模型设置如下:

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

 public class Child{
  private String name;

 }

编辑:设法对其进行排序 HQL order by within a collection尽管当 parent 双方都有相同的children.name值时,它不会比较下一个可能的值。即

如果 Parent1 有 child abba,zeon
Parent2 有 child abba,客串
升序应优先考虑 Parent2。

最佳答案

如果您不想复制父级,则无法使用集合来实现。您可以做的是选择父级并子选择每个父级中的最大元素(按字母顺序)并按其排序。

围绕这些线的一些东西。

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

如果需要,您可以使用@Formula 来映射最大元素。因此根本没有必要使用集合。

实际上用公式可能会更好,你可以直接映射最大名称和顺序,而根本不需要获取集合。

关于java - 按父对象设置的子对象的值对父对象进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45987944/

相关文章:

java - Android:日期对话框在 onDateChange 上获取

mysql - 如何分析 MySQL

sql - 文件系统管理工具

java - 从数据库端进行更改时不会调用 Hibernate 事件监听器

java - 根据特定条件在 Oracle SQL 数据库中添加值

java - 遍历Collection,避免在循环中删除对象时避免ConcurrentModificationException

java - 有没有更简洁的方法来做到这一点? java IF

sql - 我怎样才能找到一个组的最大值的记录?

hibernate - chalice :Column transformers ( like Hibernate )

java - 使用 Hibernate 玩 Framework - 如何像 Spring 一样使用 DAO/Service/controller