【问题标题】:How to specify return types of columns in NativeQuery如何在 NativeQuery 中指定列的返回类型
【发布时间】:2015-01-01 15:49:08
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: spring hibernate jpa entitymanager


    【解决方案1】:

    如果您不指定结果类,您将获得该列的 JDBC 驱动程序的返回类型,该类型可能因使用的数据存储而不同。这是一个本机 (SQL) 查询,因此完全依赖于 JDBC 驱动程序(与 JPA 实现相反)

    【讨论】:

      【解决方案2】:

      似乎没有任何解决方案,但这个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();
      

      【讨论】:

        猜你喜欢
        • 2019-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-08
        • 1970-01-01
        • 2022-12-19
        • 2021-05-29
        • 1970-01-01
        相关资源
        最近更新 更多