当前位置: 代码迷 >> java >> 将Hibernate createNativeQuery与TypedQuery一起用于Integer.class
  详细解决方案

将Hibernate createNativeQuery与TypedQuery一起用于Integer.class

热度:132   发布时间:2023-07-26 14:33:27.0

我想对带有Integer.class参数的NativeQuery使用Hibernate TypedQuery 可能吗?

NativeQuery<Integer> query = session.createNativeQuery("select 1 from dual", Integer.class);
query.list(); //<--Error.  Caused by: org.hibernate.MappingException: Unknown entity: java.lang.Integer

要么

query.getResultList(); //<--Error. Caused by: org.hibernate.MappingException: Unknown entity: java.lang.Integer

要么

query.getSingleResult(); //<--Error. Caused by: org.hibernate.MappingException: Unknown entity: java.lang.Integer

我在网上发现了一些例子,这些例子从理论上讲是可行的。

更新1:我已经更新了示例。

更新2:添加getSingleResult()示例。

createNativeQuery()的第二个参数应该是一个映射的实体。 整数不是。 因此,您必须执行以下操作:

Query query = em.createNativeQuery("select 1 from dual");  
Integer val = (Integer) query.getSingleResult(); 

resultClass参数仅接受实体类。

另外,在使用本机查询时,您永远无法保证数字的返回类型是什么,因此在java.math.BigInteger使用Integer或Long在类型转换中通常会给您带来java.math.BigInteger

您需要做的是:

Query query = em.createNativeQuery("select 1 from dual");  
Number nval = (Number) query.getSingleResult(); 
Integer val = nval == null ? null : nval.intValue();

或获取列表:

Query query = em.createNativeQuery("select 1 from dual");
List<Number> l = (List<Number>) query.getResultList();
for (Number nval : l) {
    Integer val = nval == null ? null : nval.intValue();
    // do stuff
}
  相关解决方案