2017-03-05 12 views
1

私はthisという仕様を使用して、動的クエリを生成するためのクエリパラメータを伴う仕様を使用しています。それはうまく動作します。このようにして私は単純な.and()または.or()を使うことができます。Springデータ:仕様書付きの複雑なクエリ

私の質問は、動的入力を指定したwhere ((a & b)|(c & d) & (x))のような複雑なクエリを処理するためのベストプラクティスは何ですか?

答えて

0

ダイナミッククエリを生成したい場合(あなたの/またはでどれくらいの要素があるかわからない場合)、最適な解決策はクエリを生成するためのビルダークラスを作成することです。例:私のgithubのSpecificationBuilder

あなたは私はあなたが(ちょうど例)のような仕様を使用することをお勧めしていますどのように多くの要素を知っている:

(root, query, builder) -> { 
    return builder.and(
     builder.equal(root.get("id"), "1"), 
     builder.equal(root.get("name"), "name"), 
     builder.or(
      builder.equal(root.get("id"), "2"), 
      builder.equal(root.get("name"), "enam") 
     ) 
    ); 
}