我有一个与子表具有 OneToMany 关联的父级。
我正在尝试使用 CriteriaBuilder 编写一个查询来限制从 Child 表返回的结果。
我正在添加一个谓词,例如
cb.equal(parent.get("children").get("sex"), "MALE")
如果父母有一个儿子或儿子和女儿,则将归还该父母,但也会归还他们拥有的所有孩子。
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;
};
}