You might want to try one of the following ways:
-
Using the method
createNativeQuery(sqlString, resultClass)Native queries can also be defined dynamically using the
EntityManager.createNativeQuery()API.String sql = "SELECT USER.* FROM USER_ AS USER WHERE ID = ?"; Query query = em.createNativeQuery(sql, User.class); query.setParameter(1, id); User user = (User) query.getSingleResult(); -
Using the annotation
@NamedNativeQueryNative queries are defined through the
@NamedNativeQueryand@NamedNativeQueries
annotations, or<named-native-query>XML element.@NamedNativeQuery( name="complexQuery", query="SELECT USER.* FROM USER_ AS USER WHERE ID = ?", resultClass=User.class ) public class User { ... } Query query = em.createNamedQuery("complexQuery", User.class); query.setParameter(1, id); User user = (User) query.getSingleResult();
You can read more in the excellent open book Java Persistence (available in PDF).
───────
NOTE: With regard to use of getSingleResult(), see Why you should never use getSingleResult() in JPA.