HQL

Contactar con el profesor

Definir consultas

//recupero una colección de objetos
TypedQuery<Libro> hqlQuery1 = session.createQuery("FROM  Libro");
//recupero un String en vez de un objeto
TypedQuery<String> hqlQuery2 = session.createQuery("SELECT v.matricula FROM Vehiculo v");
//Consulta ordenada
TypedQuery<Libro> hqlQuery3 = session.createQuery("FROM Libro ORDER BY id");
//Consulta con condiciones
TypedQuery<Libro> hqlQuery4 = session.createQuery("FROM Libro WHERE precio>10 AND anio_publicacion>1984");

Ejecutar consulta

List<Libro> libros = hqlQuery.getResultList();
Libro libro = hqlQuery.getSingleResult();

Eliminar un registro

TypedQuery<Paciente> hqlQuery = session.createQuery("DELETE FROM Paciente WHERE id=:condicion");
hqlQuery.setParameter("condicion", 4);
hqlQuery.executeUpdate();

Evitar inyección SQL

Se debe evitar crear consultas HQL concatenando Strings:

String queryString = "FROM item i WHERE i description LIKE' " + search + " ' ";

En cambio es aconsejable usar:

String queryString = "FROM Libro WHERE titulo LIKE :condicion";
hqlQuery.setParameter("condicion", "%tit%");
List result2 = hqlQuery2.list();

Consulta relacionada

Evaluar si una propiedad del bean es igual a cierto valor
(no funciona si la propiedad es una lista)

String queryString = "FROM Libro l WHERE l.autor.nombre LIKE :condicion";

Evaluar si uno de los los elementos de la propiedad del bean consultado es igual a cierto valor

String queryString = " SELECT a FROM Autor a JOIN a.libros l WHERE l.titulo='titulox11'";
TypedQuery hqlQuery = session.createQuery(queryString);

Nota: La siguiente línea es equivalente a la línea en verde (pero utilizando join):

String queryString = "SELECT l FROM Libro l JOIN l.autor a WHERE a.nombre='nombre1'";

Las palabras escritas en rojo son propiedades de las clases, no son campos de la base de datos.

← Criteria
Ejercicio Alumno →

Aviso Legal | Política de privacidad