とチェーンのクエリパラメータは、私は以下のリポジトリで公開されたエンティティがあります。私はそれが何をしたいのですがどのような春データレクリエーション:論理OR
public interface InsertRepository extends PagingAndSortingRepository<InsertEntity, Long>, QueryDslPredicateExecutor<InsertEntity>, QueryDslBinderCustomizer<QInsertEntity> {
@Override
default void customize(QuerydslBindings bindings, QInsertEntity insert) {
bindings.bind(String.class).all(StringPath path, Collection<? extends String> values) -> {
BooleanBuilder predicate = new BooleanBuilder();
values.forEach(value -> predicate.or(path.containsIgnoreCase(value)));
return predicate;
});
}
}
をすべてGETクエリパラメータを論理として連鎖されているということです?description=searchText&customerName=searchText
のようなクエリが見えますSQLクエリを実行しますように、OR、次のように:
WHERE description LIKE '%searchText%' OR customerName LIKE '%searchText%'
をしかし、それは動作しませんので、私は何か間違ったことしなければならない - それはにすべてのクエリパラメータを入れていますクエリ。その結果、顧客名にsearchText
が含まれ、その説明がであるレコードのみが選択されます。あなたはこのような
例として名前付きパラメータを使用する53使用して、指定されたパラメータ
でき
TypeBinder $、すべての()を使用すると、複数値は、あなたがで指定することをバインドをカスタマイズすることができますパスまたはクラス別に表示されます。しかし、クラスごとにバインディングをカスタマイズしても、クエリパラメータはグローバルには扱われません。例えば –
@MarcTarin大丈夫ですので、正しく理解すれば 'customize'メソッドを使って必要なものを達成することはできません。 – Ahatius
たとえば、 '?description = searchText&description = searchInt'は、' WHERE description LIKE '%searchText%' OR description LIKE '%searchInt%' 'を与えます。 「customerName」のOccurenceSは別個の句として処理され、すべての句はANDで結合されます。だから、私の知る限りでは、 'customize'メソッドで必要なものを達成することはできません。 –