【发布时间】:2015-03-19 13:30:33
【问题描述】:
我有一个父级,它与一个子表具有 OneToMany 关联。
我正在尝试使用 CriteriaBuilder 编写查询以限制从 Child 表返回的结果。
我正在添加一个谓词,类似于
cb.equal(parent.get("children").get("sex"), "MALE")
如果 Parent 有一个儿子或 SON 和 Daughter,它会返回该父母,但也会返回他们拥有的所有孩子。
Hibernate 使用我的谓词触发第一个查询,但获取子项的第二个查询仅在它不包含的 where 子句中使用 JoinColumn
cb.equal(parent.get("children").get("sex"), "MALE").
想法?
我正在使用 SetJoin
children = parent.joinSet("children", JoinType.LEFT)
澄清:
public static Specification<Parent> findPlanBenefits(Integer parentId) {
return (parent, query, cb) -> {
Predicate predicates = cb.conjunction();
List<Expression<Boolean>> expressions = predicates.getExpressions();
//Parent Criteria
expressions.add(cb.equal(parent.get("parentId"), parentId));
//Children Criteria
SetJoin<Parent, Children> children = parent.joinSet("children", JoinType.LEFT);
Predicate sex = cb.equal(children.get("sex"), "MALE");
children.on(sex);
return predicates;
};
}
【问题讨论】:
-
请修正代码格式,删除
<code>标签和箭头。在代码前留一个空行,并使用缩进使其格式正确。
标签: java jpa one-to-many