我有問題,當我實施「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