在Spring Data JPA中如何用AND和OR一起实现Where谓词

时间:2016-11-28 03:58:42

标签: spring hibernate spring-data-jpa jpql

使用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 = ? )

1 个答案:

答案 0 :(得分:1)

在这种情况下,您可以使用JpaSpecificationExecutor,以下是实现的方法。

  1. 使用JpaSpecificationExecutor扩展您的仓库。

    public interface EntityRepo extends PagingAndSortingRepository<Entity, String>, JpaSpecificationExecutor<Entity>

  2. 创建一个Specification类并使用Predicate

    实现您的查询

    Predicate predicateAnd1 = cb.equal(entity.getA(), entity.getB());

    Predicate predicateAnd2 = cb.equal(entity.getC(), entity.getD());

    Predicate predicateOr = criteriaBuilder.and(predicateAnd1, predicateAnd2);

  3. 然后在您的服务类中使用类似下面的内容

    repo.findAll(entitySpec.getSpec());

  4. 以下页面有一个很好的例子。

    https://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/