Как передать аргумент функции при использовании ParameterExpression вместе с org.springframework.data.jpa.domain.Specification?
Я использую org.springframework.data.jpa.domain.Specification вместе с JpaSpecificationExecutor для простого создания запросов с условиями в Java, но теперь мне нужно вызвать функцию MySQL DB, которая возвращает целочисленное значение.
Проблема в том, что неясно, как передать аргумент для этой функции, так как я не использую TypedQuery:
// cb here is CriteriaBuilder
ParameterExpression param = cb.parameter(String.class);
Predicate predicate = cb.greaterThan(cb.function("A_FUNCTION",
Integer.class, param), 0);
Specification spec = cb.and(predicate);
// query is executed like this
return (int) repositoryThatExtendsJpaSpecificationExecutor.count(test);
И пример отсюда не помогает.
1 ответ
Решение
Я думаю, что вам действительно нужно это литерал, который вы можете создать с помощью CriteriaBuilder.literal
, Полный пример будет выглядеть так
// cb here is CriteriaBuilder
Expression param = cb.literal("Stephen Hawking");
Predicate predicate = cb.greaterThan(cb.function("A_FUNCTION",
Integer.class, param), 0);
Specification spec = cb.and(predicate);
Если значение не приходит из вашего приложения, вы можете использовать (m) любую функцию, возвращающую Expression
,