在jpql中执行case表达式

时间:2014-04-04 11:46:50

标签: java jpql

我正在学习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语句?

2 个答案:

答案 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,类似的更改也应该有效。