我正在学习JPA并且用JPQL做一些事情。我在CASE表达式中遇到了麻烦。 例如,此查询
Query caseQuery = em
.createQuery("SELECT t , CASE WHEN t.salary = 20000 THEN '20k' WHEN t.salary = 40000 THEN '40k' ELSE 'No salary' END FROM Teacher t");
并使用
执行它List<Teacher> teachers = (List<Teacher>) caseQuery.getResultList();
但每当我尝试打印出结果时,我ClassCastException
Object
无法转换为Teacher
我已尝试将TypedQuery
用于Teacher
,但它没有用。请问各位专家请注意在JPQL中执行这些CASE
语句?
答案 0 :(得分:0)
原因是由于查询中有多个select表达式而不是CASE Expression,我相信有多个select表达式,结果将是Object []而不是转换为Entity。一些参考文献JPA Tutorial; JPQL。已在stack overflow中的相关查询。
答案 1 :(得分:0)
你应该修改
List<Teacher> teachers = (List<Teacher>) caseQuery.getResultList();
到
List<Object[]> teachers = (List<Object[]>) caseQuery.getResultList();
其中Object[]
将是Teacher
&amp;的数组。 String
对于TypedQuery
,类似的更改也应该有效。