带收集的Hibernate AliasToBean

我在父类和子类之间定义了双向一对多关系。 我正在寻找执行一个查询,以便我可以返回单个父项,以及它在bean中的子项的子集。

public class Parent { private int id; private Set children = new HashSet(0); // other fields + getters and setters } public class Child { private Parent parent; private int age; // other fields + getters and setters } 

我想要实现的输出是:

 public class ParentChildWrapper { private Parent parent; private Collection children; // subset of children } 

我想过滤父母的id和孩子的年龄栏。 我已经尝试了许多查询组合以获得所需的输出。

以下是关闭,但不会将子集合在我已定义的ParentChildWrapper bean的集合中。 我得到的结果是一个对象列表,每个子节点有一个与年龄filter匹配的实例:

 Query q = session.createQuery( "SELECT p, c " + "FROM Parent p " + "INNER JOIN p.children c " + "WHERE p.id = :id " + "AND c.age = :age" ); 

我也尝试按父母分组,以便尝试将所有孩子聚合成一个集合,但也无济于事。

显然,我可以将它分成两个单独的查询,以便选择父项,然后选择我想要的子项。 但感觉这应该是一个相当常见的用例。 也许我不会以一种hibernate式的方式思考。

只是不要使用任何变压器并自行编码循环:

 List rows = query.list(); Parent parent = null; List children = new ArrayList(rows.size()); for (Object[] row : rows) { parent = (Parent) row[0]; children.add((Child) row[1]); } ParentChildWrapper result = new ParentChildWrapper(parent, children); 

这使得8行简单代码而不是1行,但避免了reflection调用,因此允许安全重构。