2013-02-18 44 views
0

我使用JPA是第一次和我得到這個錯誤,當我嘗試查詢Postgres數據庫:JPA:PGobject裏無法施展

Exception in thread "main" java.lang.ClassCastException: org.postgresql.util.PGobject cannot be cast to [Ljava.lang.Object; 

的代碼是:

List<Results> r = em.createNativeQuery("SELECT r FROM RESULTS r\n" 
      + "INNER JOIN SESSION S ON s.SESSION_ID = r.SESSION_ID WHERE s.SESSION_ID = '" + sessionId + "'").getResultList(); 

我已經嘗試過使用Object [],但錯誤還是一樣

List<Object[]> r = em.createNativeQuery("SELECT r FROM RESULTS r\n" 
      + "INNER JOIN SESSION S ON s.SESSION_ID = r.SESSION_ID WHERE s.SESSION_ID = '" + sessionId + "'").getResultList(); 

有人知道什麼是錯?

回答

0

我注意到你正在爲nativeQuery使用JPQL語法,你有沒有用createQuery方法()試過這段代碼?

List<Results> r = em.createQuery("SELECT r FROM RESULTS r\n" 
      + "INNER JOIN SESSION S ON s.SESSION_ID = r.SESSION_ID WHERE s.SESSION_ID = '" + sessionId + "'").getResultList(); 

如果SQL是正確的,並且您使用本機查詢,確實

Query query = em.createNativeQuery(SELECT * FROM RESULTS r\n" 
       + "INNER JOIN SESSION S ON s.SESSION_ID = r.SESSION_ID WHERE s.SESSION_ID = '" + sessionId + "'"); 
List<Object[]> result = query.getResultList(); 

返回無類轉換異常?

+0

感謝您的回答。是的,我使用的是createQuery,但這種方法給了我sintax錯誤。所以我開始用SQL代碼來使用createNativeQuery。上面的代碼是SQL和它的權利,因爲它在postgres控制檯中工作。 – hemartins 2013-02-18 21:38:34

+0

如果您嘗試返回列表會發生什麼情況? – Beanz 2013-02-18 21:44:17

+0

對PGObject進行快速查找時指出PGobject是用於描述未知類型的類未知類型是JDBC標準未知的任何類型。如果它不起作用,我會簡化sql語句......以查看它是否可以用一列或兩列進行映射。 – Beanz 2013-02-18 21:45:12

0

假設你使用的是SQL而不是JPQL,那你爲什麼不使用它呢?

List<Object> result = query.getResultList(); 

由於您只是在SQL中選擇單列,因此每一行都映射到對象會更有意義。

相關問題