Spring 如何在NativeQuery中指定列的返回类型
如何在NativeQuery中指定列的返回类型?现在查询返回BigInteger,但我想将其映射到LongSpring 如何在NativeQuery中指定列的返回类型,spring,hibernate,jpa,entitymanager,Spring,Hibernate,Jpa,Entitymanager,如何在NativeQuery中指定列的返回类型?现在查询返回BigInteger,但我想将其映射到Long @PersistenceContext private EntityManager entityManager; Object[] o = (Object[]) entityManager.createNativeQuery("SELECT x FROM y WHERE id = :id").setParameter("id", id).getSingleResult(); (Long)
@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中没有
谢谢。如果不指定结果类,您将获得该列JDBC驱动程序的返回类型,根据使用的数据存储,返回类型可能会有所不同。这是一个完全依赖JDBC驱动程序的本机(SQL)查询(与JPA实现相反)似乎没有任何解决方案,但这似乎提供了一种解决方法。例如
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();