Lenguaje JPQL

JPQL es un lenguaje que permite realizar consultas como operaciones masivas sobre Entity Beans. Presenta una sintaxis similar a SQL, pero no está orientado a un modelo relacional (basado en tablas y columnas) sino a un modelo de objetos (objetos y atributos).
Las Entidades son sensibles a mayúsculas y minúsculas en los nombres de la Entidad y los campos.

Ejemplo de una Entidad Empleado.
Si queremos recuperar todos los datos de un empleado:
 
SELECT e FROM Empleado e
 
La cláusula from no se refiere a una tabla, sino a una clase, en nuestro ejemplo, la clase Empleado.
El resultado de la consulta es un Entity Bean.
Para ejecutar esta consulta:
 
Query consulta = entityManager.createQuery("SELECT e FROM Empleado e");
List<Empleado> empleados= consulta.getListResult();
 
También se utilizan las anotaciones @NamedQuery y @NamedQueries. Para definir una única consulta en la clase de un Entity Bean:
 
@Entity
@Table(name = "EMPLEADOS")
@NamedQuery(name="todosempleados", query="SELECT e FROM Empleado e")
public class Empleado {
 //Métodos y elementos de la clase Empleado
}
 
Para definir más de una consulta dentro de un entity Bean se utiliza la anotación @NamedQueries que contiene un conjunto de consultas.
 
@Entity
@Table(name = "Empleado")
@NamedQueries(value={
 @NamedQuery(name=" todosempleados", query="SELECT e FROM Empleado e")
, @NamedQuery(name=" todosempleadosorden", query="SELECT e FROM Empleado e ORDER BY e.Nombre")}
)
public class Empleado {
//Métodos y elementos de la clase Empleado
}
 
Para ejecutarlas:
 
Query consulta = entityManager.createNamedQuery("todosempleados");
List<Empleado> empleados = consulta.getResultList();
 
Para utilizar parámetros posicionales, el parámetro debe indicarse en la cláusula where de la consulta con el prefijo ?, y a continuación el número posicional del parámetro.
 
SELECT e FROM Empleado e WHERE e.Nombre = ?1
 
Luego, al ejecutarla, se establece el valor del parámetro según su posición:
 
Query consulta = entityManager.createQuery("SELECT e FROM Empleado e WHERE e.Nombre = ?1");
consulta.setParameter(1, "SHUM");
Empleado emp = consulta.getSingleResult();
 
Para utilizar parámetros por nombre, el parámetro debe indicarse en la cláusula where de la consulta con el prefijo: y a continuación el nombre del parámetro:
 
SELECT e FROM Empleado e WHERE e.Nombre = :nombreempleado
 
Posteriormente, al ejecutarla, se establece el valor del parámetro según su nombre:
 
Query consulta = entityManager.createQuery("SELECT e FROM Empleado e WHERE e.Nombre = :nombreempleado");
consulta.setParameter("nombreempleado", "SHUM");
Empleado emp = consulta.getSingleResult();
 

No hay comentarios:

Publicar un comentario