我想对带有Integer.class参数的TypedQuery
使用休眠NativeQuery
。有可能吗?
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
我在Web上发现了一些例子,表明从理论上讲这是可能的。
更新1:我已经更新了示例。
更新2:添加getSingleResult()示例。
答案 0 :(得分:0)
createNativeQuery()的第二个参数应该是一个映射的实体。整数不是。所以你必须做:
Query query = em.createNativeQuery("select 1 from dual");
Integer val = (Integer) query.getSingleResult();
答案 1 :(得分:0)
resultClass参数仅接受实体类。
此外,在使用本机查询时,您无法保证数字的返回类型将是什么,因此在java.math.BigInteger
中使用Integer或Long在类型转换中通常会给您带来麻烦。
您需要做的是:
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
}