How to get value of some fields in a native query (JPA)?
For example I want to get name and age of customer table:
Query q = em.createNativeQuery("SELECT name,age FROM customer WHERE id=...");
Note: I don't want to map results to entities. I just want to get the value of the field.
Thanks
A native query with multiple select expressions returns an Object[]
(or List<Object[]>
). From the specification:
3.6.1 Query Interface
...
The elements of the result of a Java Persistence query whose SELECT clause consists of more than one select expression are of type
Object[]
. If the SELECT clause consists of only one select expression, the elements of the query result are of type Object. When native SQL queries are used, the SQL result set mapping (see section 3.6.6), determines how many items (entities, scalar values, etc.) are returned. If multiple items are returned, the elements of the query result are of typeObject[]
. If only a single item is returned as a result of the SQL result set mapping or if a result class is specified, the elements of the query result are of typeObject
.
So, to get the name and age in your example, you'd have to do something like this:
Query q = em.createNativeQuery("SELECT name,age FROM customer WHERE id = ?1");
q.setParameter(1, customerId);
Object[] result = (Object[])q.getSingleResult();
String name = result[0];
int age = result[1];