我有问题,当我实施“CASE WHEN”条件与JPQL情况下表达JPQL
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.0-api</artifactId>
</dependency>
select u
from user u
where u.languageId = case
when :userLanguageId is null then :managerLanguageID
else :userLanguageId
end
我想根据managerLanguageID得到的数据,如果数据相应userLanguageId为空。所以当我用THEN关键字使用参数时会出现问题。但它工作正常,如果我手动设置参数,如:
select u
from user u
where u.languageId = case
when :userLanguageId is null then 1
else :userLanguageId
end
顺便说一句,。这里是它抛出异常:
产生的原因:java.lang.IllegalArgumentException异常: java.lang.ClassCastException : org.hibernate.hql.internal.ast.tree.ParameterNode can not be cast to org.hibernate.hql.internal.ast.tree.SelectExpression at org.springframework.data.jpa.repository.query.SimpleJpaQuery。( SimpleJpaQuery.java:73) at org.springframework.data.j pa.repository.query.SimpleJpaQuery.fromQueryAnnotation(SimpleJpaQuery.java:132) 在 org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy $ DeclaredQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:114)
所以“u.languageId =:userLanguageId为null”应该是一个布尔表达式。也许“u.languageId =:userLanguageId”?或“u.languageId为NULL”? – 2014-09-05 08:13:37