2015-01-01 15 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(); 
相关问题