2014-04-04 52 views
1

我正在學習JPA,並且使用JPQL做了一些操作。我在CASE表達式中遇到問題。 例如,下面的查詢,在jpql中執行大小寫表達式

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(); 

執行,但每當我嘗試打印結果出來,我越來越ClassCastExceptionObject不能轉換爲Teacher

我試過使用TypedQuery代替Teacher,但它沒有奏效。請問專家,請在JPQL中執行此CASE語句?

+0

我認爲這是在JPA 2.0中引入的情況 - 請參閱http://stackoverflow.com/questions/427447/is-there-such-thing-case-expression-in-jpql – Leo

+0

@Leo我已經看到這個問題解釋瞭如何編寫CASE表達式,甚至書籍和官方文檔都解釋了這一點。我在執行CASE查詢和獲取結果時遇到了麻煩。 –

+0

我明白了。在你的情況下,你檢索的不僅僅是一個教師對象,所以我認爲你必須在查詢中返回除教師對象之外的東西 – Leo

回答

0

原因是由於您的查詢中有多個選擇表達式,而不是由於CASE表達式,我相信有多個選擇表達式的結果將是Object []而不是轉換爲實體。一些參考文獻JPA Tutorial; JPQL。相關查詢已在stack overflow中。

0

您應修改

List<Teacher> teachers = (List<Teacher>) caseQuery.getResultList(); 

List<Object[]> teachers = (List<Object[]>) caseQuery.getResultList(); 

其中Object[]將是Teacher & String

的數組,TypedQuery也類似的變化應該工作。