クエリ実行にSpringDataを使用して、QueryDSLに基づいた動的フィルタコンポーネントを作成しています。したがって、Predicate
インスタンスを受信データ広告から作成してQueryDslPredicateExecutor
に渡します。エンティティ属性に動的にアクセスするには、エンティティクラスに型名PathBuilder
と入力します。要素の複数の属性によるフィルタコレクション - QueryDSL
class Offer {
List<LanguageToName> names;
}
class LanguageToName {
String name;
String language;
}
私は属性を持つ彼らのコレクションname
要素を持っているOffer
entites、「ABC」を照会しようとすると、以下のように、私は単に述語を作成します:
は、以下の(簡体字)のコードを考えてみましょう
pathBuilder.getCollection("names", LanguageToName.class).any().getString("name")
.like("%" + fieldData.getFieldValue() + "%");
しかし、私は、PathBuilder
を使用して、含まれているオブジェクトの複数の属性によってコレクションをフィルタリングするソリューションを考え出すことができませんでした。上記のコードを.and()
に追加し、pathBuilder
変数を使用して再度コレクションにアクセスすると、結果として望ましくない結果をもたらすAND EXISTS...
というSQLクエリを追加することと同等の結果が得られます。私もgetCollection().contains()
を使用しようとしましたが、そのような場合を記述するExpression<LanguageToName>
を作成できませんでした。
Predicate
を作成して、コレクションの要素の複数の属性、つまり照会されたエンティティの項目によってエンティティをフィルタリングする方法はありますか?