я с проблемой, когда я реализую «случай, когда» условие с 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
BTV, .Здесь исключение он бросает:
Вызванный: java.lang.IllegalArgumentException: java.lang.ClassCastException : org.hibernate.hql.internal.ast.tree.ParameterNode не может быть отнесен к org.hibernate.hql.internal.ast.tree.SelectExpression в org.springframework.data.jpa.repository.query.SimpleJpaQuery. (SimpleJpaQuery.java:73) по адресу 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 is null» должно быть логическим выражением. Возможно, «u.languageId =: userLanguageId»? или "u.languageId NULL"? –