У меня есть Spring Spring Rest API, использующий Querydsl предикат для фильтрации, я использую QuerydslBinderCustomizer в моем MongoRepository , чтобы связать путь свойств для настройки запроса.
Поведением по умолчанию, когда для одного и того же пути задано несколько значений поиска, является оператор ИЛИ между этими значениями.
Но если используется несколько путей и используется оператор И.
То, что я хочу сделать, это поместить оператор OR между несколькими выбранными путями.
Я нашел эту довольно четкую документацию, но не нашел в ней ответа: https://gt -tech.bitbucket.io / spring-data-querydsl-value-operator / README.html
Сегодня у меня есть:
CONTROLLER
public Page<Document> find(
@QuerydslPredicate(root = Document.class) Predicate predicate) {
return repository.findAll(predicate);
}
Хранилище
public interface Repository extends
MongoRepository<Document, String>,
QueryDslPredicateExecutor<EventRuleDocument>,
QuerydslBinderCustomizer<QEventRuleDocument> {
@Override
default void customize(QuerydslBindings bindings, QDocument doc) {
bindings.bind(doc.prop1).first(StringExpression::containsIgnoreCase);
bindings.bind(doc.prop2).first(StringExpression::containsIgnoreCase);
bindings.bind(doc.prop3).first(StringExpression::containsIgnoreCase);
}
}
Ведьма дает мне предикат: prop1 == v1 AND prop2 == v2 AND prop3 == v3
Чего я хотел бы достичьis: prop1 == v1 OR prop2 == v2 OR prop3 == v3
Возможно ли это с использованием QuerydslBinderCustomizer ?
OНужно ли создавать собственный контроллер и / или метод хранилища?