Reputation: 2406
I want to use Hibernate TypedQuery
for a NativeQuery
with Integer.class argument. Is it possible?
NativeQuery<Integer> query = session.createNativeQuery("select 1 from dual", Integer.class);
query.list(); //<--Error. Caused by: org.hibernate.MappingException: Unknown entity: java.lang.Integer
or
query.getResultList(); //<--Error. Caused by: org.hibernate.MappingException: Unknown entity: java.lang.Integer
or
query.getSingleResult(); //<--Error. Caused by: org.hibernate.MappingException: Unknown entity: java.lang.Integer
I've found some examples on Web that suggest, this is theoretically possible.
Update 1: I've updated the example.
Update 2: Add getSingleResult() example.
Upvotes: 2
Views: 4887
Reputation: 5095
The resultClass parameter only accepts entity classes.
Also, when using native queries you are never guaranteed what what the return type for numbers will be, so using Integer or Long in a typecast will often blow-up on you when it's java.math.BigInteger
.
What you need to do is:
Query query = em.createNativeQuery("select 1 from dual");
Number nval = (Number) query.getSingleResult();
Integer val = nval == null ? null : nval.intValue();
Or for a list:
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
}
Upvotes: 3
Reputation: 106
Second parameter of createNativeQuery() should be a mapped entity. Integer is not. So you have to do :
Query query = em.createNativeQuery("select 1 from dual");
Integer val = (Integer) query.getSingleResult();
Upvotes: 2