Я работаю с SpringBoot Rest API в Java, и у меня есть IssueRepository для сущностей Issue, который расширяет QuerydslPredicateExecutor и QuerydslBinderCustomizer. Каждый объект проблемы связан с объектом последних действий, который содержит логическое поле isClosed. Я хочу найти все проблемы, которые не закрыты, поэтому либо проблема не имеет последней активности, либо последней активности, где isClosed = false. Мой веб-интерфейс создает URL для представления этого: /api/issues&latestActivity.isClosed=0&latestActivity=-1.
Я хочу использовать привязки QueryDsl для ИЛИ этих двух условий вместе, используя MultiValueBinding, как описано в Привязки предикатов QueryDSL "или" между несколькими путями . Это предлагаемое решение:
@Override
default void customize(QuerydslBindings bindings, QDocument root) {
StringPath[] multiPropertySearchPaths = new StringPath[] {root.prop1, root.prop2, root.prop3};
/**
* Binds prop1, prop2 and prop3 in OR clause
* This binding will activate when one of the given properties are searched in query params
*/
bindings.bind(multiPropertySearchPaths).all(new MultiValueBinding<StringPath, String>() {
@Override
public Predicate bind(StringPath path, Collection<? extends String> values) {
BooleanBuilder predicate = new BooleanBuilder();
// Bind paths present in array multiPropertySearchPaths with incoming values
for (StringPath propertyPath : multiPropertySearchPaths) {
values.forEach(value -> predicate.or(propertyPath.containsIgnoreCase(value)));
}
return predicate;
}
});
}
Моя проблема в том, что я не могу определить multiPropertySearchPaths или MultiValueBinding, потому что мои пути имеют два разных типа (issue.latestActivity - это путь к сущности, но issue.latestActivity.isClosed это логический путь).
Есть ли способ использовать MultiValueBinding или какую-либо другую функцию QueryDsl для ИЛИ двух полей разных типов?