使用JapRepository - SPring Data JPA,如何处理这种情况:(AnB)U(CnD)操作,其中括号起着至关重要的作用。
findAllByAAndB() => WHERE A = ? AND B = ?
findAllByCAndD() => WHERE C = ? AND D = ?
findAllByXOrY() => WHERE X = ? AND Y = ?
<How to achieve this clause> => WHERE ( A = ? AND B = ? ) OR ( C = ? AND D = ? )
答案 0 :(得分:1)
在这种情况下,您可以使用JpaSpecificationExecutor,以下是实现的方法。
使用JpaSpecificationExecutor扩展您的仓库。
public interface EntityRepo extends PagingAndSortingRepository<Entity, String>, JpaSpecificationExecutor<Entity>
创建一个Specification类并使用Predicate
实现您的查询 Predicate predicateAnd1 = cb.equal(entity.getA(), entity.getB());
Predicate predicateAnd2 = cb.equal(entity.getC(), entity.getD());
Predicate predicateOr = criteriaBuilder.and(predicateAnd1, predicateAnd2);
然后在您的服务类中使用类似下面的内容
repo.findAll(entitySpec.getSpec());
以下页面有一个很好的例子。
https://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/