将ParameterExpression与org.springframework.data.jpa.domain.Specification一起使用时,如何将参数传递给函数?

zyg*_*tus 2 spring jpa criteria-api spring-data-jpa

我正在使用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);
Run Code Online (Sandbox Code Playgroud)

而且这里的例子没有帮助。

Jen*_*der 5

我认为您真正需要的是可以使用创建的文字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);
Run Code Online (Sandbox Code Playgroud)

如果该值不是来自您的应用程序,则可以使用(m)任何返回Expression函数