2015-01-01 17 views
0

如何在NativeQuery中指定列的返回類型?現在查詢返回BigInteger,但我想將其映射到Long。如何在NativeQuery中指定列的返回類型

@PersistenceContext 
private EntityManager entityManager; 

Object[] o = (Object[]) entityManager.createNativeQuery("SELECT x FROM y WHERE id = :id").setParameter("id", id).getSingleResult(); 
(Long) o[0]; 

引出

產生的原因:java.lang.ClassCastException:java.math.BigInteger中不能 強制轉換爲java.lang.Long中

在Hibernate中有addScalar函數,但在javax.persistence中不是。

謝謝。

回答

1

如果不指定結果類,那麼將獲得該列的JDBC驅動程序的返回類型,該驅動程序可能與使用中的數據存儲庫有所不同。這是一個本地(SQL)查詢,完全依賴於JDBC驅動程序(與JPA實現相對)

1

似乎沒有任何解決方案,但此link似乎爲此提供瞭解決方法。對於例如

Query query = em.createNativeQuery("SELECT PHONE_ID FROM PHONE WHERE PHONE_NUMBER = '40101930'"); 

    ((SQLQuery)((HibernateQuery) query).getHibernateQuery()).addScalar("PHONE_ID", StandardBasicTypes.LONG); 
    Long phoneId = (Long) query.getSingleResult(); 
相關問題