SQL nativo

5.6.2.3. SQL nativo#

La última opción para realizar consultas avanzadas es, directamente usar sentencias SQL, pero tiene el problema de su dependencia del SGBD, por lo que sólo debería usarse como método complementario a JPQL o Criteria API cuando no es posible usar alguno de estos últimos medios porque la consulta es demasiado compleja y no las pueden expresar o están involucradas vistas o funciones almacenadas.

Sabiendo SQL (y las particularidades del SGBD) son sencillas de realizar:

Query query = em.createNativeQuery(
   "SELECT id, nombre FROM Estudiante WHERE nombre LIKE :patron"
).setParameter("patron", "J%");
List<Object[]> resultado = query.getResultList();

Nota

En este caso, como usamos SQL directamente, los nombres que aparecen en la sentencia son nombres de tablas y columnas.

En caso, de que el resultado coincida con un objeto, podemos indicar que se construya el objeto:

TypedQuery<Estudiante> query = sesion.createNativeQuery(
   "SELECT * FROM Estudiante WHERE nombre LIKE :patron",
   Estudiante.class
).setParameter("patron", "J%");