2016-11-28 14 views
0

JapRepository - SPring Data JPAを使用してこのケースを処理する方法:(AnB)U(CnD)操作で中カッコが重要な役割を果たす。Spring Data JPAでどのように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は、一般的に労働組合をサポートしていない[一部のプロバイダかもしれません]。適切な形式で最後のクエリを試してみましたか、どのような例外が表示されているか、不正な結果、結果がない、クエリが解析されていないなど –

答えて

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/

関連する問題