Как передать аргумент функции при использовании 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,

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