Как конвертировать пользовательскую функцию в JPA в предикат?
У меня есть индивидуальная реализация функции (интерфейс SQLFunction
) это выглядит следующим образом:
public class FilterFunction implements SQLFunction {
@Override
public boolean hasArguments() {
return true;
}
@Override
public boolean hasParenthesesIfNoArguments() {
return false;
}
@Override
public Type getReturnType(Type firstArgumentType, Mapping mapping) throws QueryException {
return StandardBasicTypes.STRING;
}
@Override
public String render(Type firstArgumentType, List arguments, SessionFactoryImplementor factory) throws QueryException {
return arguments.get(0).toString();
}
}
Так что он просто принимает параметр и заменяет функцию им. SQL может выглядеть так:
HUGE_SQL = 'SOME_VALUE' AND HUGE_SQL2 = 'SOME_VALUE'
Так что это какой-то предикат. Я использую функцию следующим образом:
ParameterExpression parameterExpression = criteriaBuilder.parameter(String.class);
criteriaBuilder.function("filter", String.class, parameterExpression));
Я хотел бы использовать дизъюнкцию с несколькими такими функциями, передавая их массив CriteriaBuilder.or
, Функция является Expression
реализация. Но CriteriaBuilder.or
занимает массив Predicate
"S. Я пытался преобразовать такую функцию в Predicate
но я получаю исключение во время исполнения.
Я пытался обернуть эту функцию в CriteriaBuilder.isTrue
, Затем я должен указать тип возвращаемого значения функции Boolean.class
вместо String.class
но потом я получаю еще одно исключение во время выполнения, сообщающее, что оно не может преобразовать мою функцию в логическое значение.
Я должен сделать это, потому что я должен использовать JPA Criteria API.
Как мне связать такие функции в CriteriaBuilder.or
? Большое спасибо!