2017-10-14 4 views
0

私はアプリケーションでSpring DataとJPAを使用しています。動的基準APIのQueryDSLを実装しようとしています。私の知る限りの基準に特定の値を送信するかのように、それが正常に述語の下に使用して動作します:QueryDSLとスプリングデータの動的フィルタマップを使用したクエリの作成JPA

Predicate predicate = QProductInfo.productInfo.shopName.eq(shopName).and(QProductInfo.productInfo.productType.eq(productType)); 

しかし、私は、複数のフィルタパラメータを受け取り、(COLUMN_NAME - COLUMN_VALUE)のキーと値のペアを格納するために地図を使用したい場合クエリを動的に取得するために、同じクエリを作成することができません。 私は述語で条件式と他の演算子を使用して条件式を追加できることを知っていますが、使用する必要がある式の数は実行時にのみ決定されるため、正しい式を作成する方法を理解できません。ここ

は、いくつかのコード情報

@Entity 
Public class ProductInfo{ 
productId; 
title; 
vendor; 
code; 
.... and more 
} 

すぐフィルタである フィルタ1 = PRODUCT_ID = 123、タイトル=試験 フィルタ2 =タイトル= XYZ、コード= ABCのような値を1からnまでのフィールドから変えることができます、vendor = pqr

私はmapを使ってキーと値のペア(title-xyzなど)を格納し、クエリを動的に構築したいと考えています。

私は多くのチュートリアルを行ってきましたが、これまでのところ私の状況に適した解決策を見つけることができませんでした。私はマップのループを反復しながらもSwitchを使うことを考えましたが、すべての式/述語をまとめる方法は何も分かりません。

解決策が見つからない場合は、JPA Criteria APIを使用して、List of Predicatesを簡単に使用できます。 ここで私を助けるために必要な情報があれば教えてください。私は、次の手順で、私の問題を解決することができた

おかげ

+0

述語を実装するBooleanBuilderを使用できます。 http://www.querydsl.com/static/querydsl/3.6.3/apidocs/com/mysema/query/BooleanBuilder.html。 ParamsがSpring Webアプリケーションから来ている場合は、自動的にプレディケートを作成することもできます。https://spring.io/blog/2015/09/04/what-s-new-in-spring-data-release-gosling #querydsl-web-support –

+0

ありがとうアラン。私はより効率的にBooleanBuilderを使用しようとします。私はまだ実行時にオブジェクト属性を設定する方法を疑っていますが、キーと値の両方が実行時間に来ているので、qproductInfo.ProductInfo。 .eq(map value)としてキーを使用する方法を教えてください。 私はそれを試しているとコメントを返す。 – yateen

答えて

0

: 私はBooleanBuilderとPathBuilderを使用。ここ

は、コードスニペットである:

BooleanBuilder builder = new BooleanBuilder(); 
PathBuilder<ProductInfo> path = new PathBuilder<>(ProductInfo.class, "productInfo"); 
    if(criteriaMap != null && !criteriaMap.isEmpty()) { 
     for (Map.Entry<String, String> entry : criteriaMap.entrySet()) { 
      builder.and(path.getString(entry.getKey()).eq(entry.getValue()));  
     } 
    } 

ここビルダーパラメータとして列名を設定するために使用されている(キーと値のペアの形式で列名と値を与える)地図とPathBuilderからエントリを追加する管理。

これを使用することで、動的クエリを作成するためにQueryDSLを効率的に使用できます。

ありがとうございました

関連する問題