2016-11-28 24 views
0

使用JapRepository - SPring Data JPA,如何處理這種情況:(AnB)U(CnD)操作,其中大括號起着至關重要的作用。在Spring Data JPA中如何實現where謂詞的AND和OR

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

JPA通常不支持union [某些提供者可能];你是否以適當的形式嘗試了最後一個查詢,得到了什麼異常,結果不正確,沒有結果,查詢沒有解析等。 –

回答

1

在這種情況下,你可以使用JpaSpecificationExecutor,下面是實現的方式。

  1. 用JpaSpecificationExecutor擴展您的回購。

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

  2. 創建規範類和服務類使用的東西,用謂詞

    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());

以下頁面有一個很好的例子。

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

相關問題