将 ParameterExpression 与 org.springframework.data.jpa.domain.Specification 一起使用时如何将参数传递给函数?
How to pass an argument to a function when using ParameterExpression together with org.springframework.data.jpa.domain.Specification?
我正在将 org.springframework.data.jpa.domain.Specification 与 JpaSpecificationExecutor 一起使用,以轻松创建条件为 Java 的查询,但现在我需要调用一个 MySQL 数据库函数,该函数 returns 是一个整数值。
问题是不清楚如何为这个函数传递参数,因为我没有使用 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);
here 中的示例没有帮助。
我认为您真正需要的是可以使用 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)functions returning an Expression
.
中的任何一个
我正在将 org.springframework.data.jpa.domain.Specification 与 JpaSpecificationExecutor 一起使用,以轻松创建条件为 Java 的查询,但现在我需要调用一个 MySQL 数据库函数,该函数 returns 是一个整数值。
问题是不清楚如何为这个函数传递参数,因为我没有使用 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);
here 中的示例没有帮助。
我认为您真正需要的是可以使用 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)functions returning an Expression
.