多对多关联查询网上多是Join的方式,缺点就是需要实体间相互引用,不太灵活。
简单示例:A、B两表关联,代码仅为示意,大概是这样的应该可以理解吧?不想花时间多写了。
aDao.findAll((Root<A> aRoot, CriteriaQuery<?> cq, CriteriaBuilder cb) -> {
Root<B> bRoot = cq.from(B.class);
// Root<C> cRoot = cq.from(C.class); 也可以加C表,D表…… 然后再cb中加关联条件就可以了。
// Join<A, B> join = A.join("b"); 可以用join方式联合查询,但是需要A中有B的实体。
List<Predicate> predicates = new ArrayList<>();
predicates.add(cb.equal(aRoot.get("id"),bRoot.get("aId"))); // AB两表的关联条件,就是sql join 中的on条件
predicates.add(cb.notEqual(aRoot.get("XXX"), XXX));
cq.distinct(true); // 去重 如果多对多
return cb.and(predicates.toArray(new Predicate[predicates.size()]));
} , pageable);
本文探讨了多对多关联查询的实现方法,避免使用实体间相互引用的Join方式,提出了一种更灵活的查询策略。通过示例代码展示了如何在A、B两表间进行关联查询,包括关联条件设置、去重操作等关键步骤。
1220

被折叠的 条评论
为什么被折叠?



