Ich habe eine Einheit, die durch die folgende Repository ausgesetzt:Spring Data Rest: Abfrageparameter mit logisch verketteten 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;
});
}
}
Was ich möchte ist zu tun, dass alle GET-Abfrageparameter verkettet werden als logische oder so, dass eine Abfrage wie ?description=searchText&customerName=searchText
würde eine SQL-Abfrage ausführen, die wie folgt aussieht:
WHERE description LIKE '%searchText%' OR customerName LIKE '%searchText%'
Allerdings muss ich etwas falsch machen, weil es nicht funktioniert - es setzt alle Abfrageparameter in eine AND
Abfrage. Dies führt dazu, dass nur diejenigen Datensätze ausgewählt werden, die in Kundenname AND deren Beschreibung enthalten.
TypeBinder $ all() ermöglicht es Ihnen, ein Mehrwert anpassen Bindung, die Sie angeben, indem Sie Pfad oder nach Klasse. Aber selbst wenn Sie eine Bindung "nach Klasse" anpassen, werden Abfrageparameter nicht global behandelt. Zum Beispiel –
@MarcTarin Okay, wenn ich Sie richtig verstehe, kann ich nicht erreichen, was ich brauche mit der 'customize' Methode, oder? – Ahatius
Zum Beispiel '? Description = searchText & description = searchInt' wird dir' WHERE description LIKE '% searchText%' ODER description LIKE '% searchInt%' 'geben. Häufigkeit von 'customerName' wird als separate Klausel verarbeitet, und alle Klauseln werden mit AND verknüpft. Also nein, nach meinem besten Wissen können Sie mit der 'customize' Methode nicht erreichen, was Sie brauchen. –