如何在NativeQuery中指定列的返回类型?现在Query返回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中却没有。
感谢。
答案 0 :(得分:1)
如果未指定结果类,则将获得该列的JDBC驱动程序的返回类型,该类型可能因所使用的数据存储区而异。这是一个本机(SQL)查询,完全依赖于JDBC驱动程序(而不是JPA实现)
答案 1 :(得分: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();