Как конвертировать пользовательскую функцию в 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? Большое спасибо!

0 ответов

Другие вопросы по тегам