Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 如何在NativeQuery中指定列的返回类型_Spring_Hibernate_Jpa_Entitymanager - Fatal编程技术网

Spring 如何在NativeQuery中指定列的返回类型

Spring 如何在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)

如何在NativeQuery中指定列的返回类型?现在查询返回BigInteger,但我想将其映射到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();