Привязки предикатов QueryDSL "или" между несколькими путями - PullRequest
1 голос
/ 17 апреля 2019

У меня есть 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Нужно ли создавать собственный контроллер и / или метод хранилища?

...