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

时间:2015-01-01 15:49:08

标签: spring hibernate jpa entitymanager

如何在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中却没有。

感谢。

2 个答案:

答案 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();