2012-11-08 132 views
0

這是我的,我使用JPA打第二次,的Java,JPA轉換異常

我寫這篇PICE代碼:

String queryString = "SELECT e.uidprofile, e.profilecode, e.catUso, max(e.zonaClim), e.classePrev, e.beta1, e.beta2, e.beta3, e.beta4" 
      + " FROM " 
      + entityClass.getSimpleName() 
      + " e " 
      + " WHERE e.catUso like :code " 
      + " group by e.uidprofile, e.profilecode, e.catUso, e.classePrev, e.beta1, e.beta2, e.beta3, e.beta4" 
      + " order by e.uidprofile"; 

    Query query = entityManager.createQuery(queryString); 

    query.setParameter("code", "C" + "%"); 

    List<SamTbProfileMapping> resultList = query.getResultList(); 

    ClassLoader c1 = this.getClass().getClassLoader(); 
    ClassLoader c2 = resultList.getClass().getClassLoader(); 

    if(resultList.size()>0){ 
     System.out.println(resultList.get(0).getCatUso()); 
    } 

調試它:

  • ​​擁有所有SamTbProfileMapping的字段值正確
  • 對象的計數是正確的
  • List<SamTbProfileMapping> resultList = query.getResultList(); 我得到C2nullSystem.out.println(resultList.get(0).getCatUso()); 說resultList不能被強制轉換爲SamTbProfileMapping
+0

什麼的System.out.println(resultList.get( 0).getClass()getSimpleName())。返回? –

+0

演員例外.. –

+0

Ljava.lang.Object;無法投射到實體.SamTbProfileMapping –

回答

2

您正在檢索包含您的查詢的數組列表。不是對象列表。

"Select a, b, c, d, from something" - 返回List<Object[]>

然後訪問單獨的構件以相同的順序在查詢。 例如:

List<Object[]> myList = query.getResultList(); 

MyAClass a1 = (MyAClass) myList.get(0)[0]; 
MyBClass b1 = (MyBClass) myList.get(0)[1]; 

要選擇對象列表,你可以使用:

"select a from MyClass a where ..."

然後

List<MyClass> myList = query.getResultList(); 
MyClass result1 = myList.get(0); 
+0

是不是隻有'createNativeQuery'的情況?我記得在努力優化性能摔跤... – ppeterka

+0

Omg我認爲你是對的 –

+0

那麼我該如何解決這個問題? –

2

我認爲你應該使用typed version of the createQuery function(從1.6)後

嘗試:

Query query = entityManager.createQuery(queryString, SamTbProfileMapping.class); 

當然,這意味着SamTbProfileMapping必須是一個實體類。我不確定聚合列,你可能需要應用別名。

+0

好吧,讓我試試... –

+0

我對不起,我試過了,但它不起作用:( –

+0

你能解釋爲什麼單個條目和結果如何映射? –