| Hi, Considering the followings java code:
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<CaseEB> q = criteriaBuilder.createQuery(CaseEB.class);
Root<CaseEB> caseRoot = q.from(CaseEB.class);
List<Expression<String>> lst = new ArrayList<>();
Expression<String> fct =
criteriaBuilder.function("replace", String.class, criteriaBuilder.literal("1"));
lst.add(fct);
Predicate equal = caseRoot.get("psiCaseId").in(lst); Predicate equal = caseRoot.get("psiCaseId").in(fct)
q.where(equal);
entityManager.createQuery(q).getResultList();
The create created with the predicate created with the in(List<Expression>) will fails with:
java.lang.IllegalArgumentException: Parameter value [org.hibernate.query.criteria.internal.expression.function.ParameterizedFunctionExpression@42ef042a] did not match expected type [java.lang.String (n/a)]
at org.hibernate.query.spi.QueryParameterBindingValidator.validate(QueryParameterBindingValidator.java:54)
at org.hibernate.query.spi.QueryParameterBindingValidator.validate(QueryParameterBindingValidator.java:27)
at org.hibernate.query.internal.QueryParameterBindingImpl.validate(QueryParameterBindingImpl.java:90)
at org.hibernate.query.internal.QueryParameterBindingImpl.setBindValue(QueryParameterBindingImpl.java:55)
at org.hibernate.query.internal.AbstractProducedQuery.setParameter(AbstractProducedQuery.java:486)
at org.hibernate.query.internal.AbstractProducedQuery.setParameter(AbstractProducedQuery.java:104)
at org.hibernate.query.criteria.internal.compile.CriteriaCompiler$1$1.bind(CriteriaCompiler.java:107)
at org.hibernate.query.criteria.internal.CriteriaQueryImpl$1.buildCompiledQuery(CriteriaQueryImpl.java:368)
at org.hibernate.query.criteria.internal.compile.CriteriaCompiler.compile(CriteriaCompiler.java:127)
at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:3617)
at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:203)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
but the query created with the in(Expression) or in(Expression,Expression) is not failing |