【发布时间】:2011-09-09 14:25:13
【问题描述】:
我在父类和子类之间定义了一个双向的一对多关系。我正在寻找执行一个查询,以便我可以在一个 bean 中返回一个父节点及其子节点的子集。
public class Parent {
private int id;
private Set<Child> children = new HashSet<Child>(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<Child> children; // subset of children
}
我想过滤父母的 id 和孩子的年龄列。为了获得所需的输出,我尝试了多种查询组合。
以下内容很接近,但没有将子项分组到我定义的 ParentChildWrapper bean 的集合中。我得到的结果是一个对象列表,每个孩子有 1 个与年龄过滤器匹配的实例:
Query q = session.createQuery(
"SELECT p, c " +
"FROM Parent p " +
"INNER JOIN p.children c " +
"WHERE p.id = :id " +
"AND c.age = :age"
);
我也尝试按父级分组,以尝试将所有子级聚合到一个集合中,但也无济于事。
显然,我可以将其分成两个单独的查询以选择父级,然后选择我想要的子级。但感觉这应该是一个相当常见的用例。也许我不是在以一种休眠方式思考。
【问题讨论】: