HQL

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

Ejecutar consulta
List<Libro> libros = hqlQuery.list();
Libro libro = hqlQuery.getSingleResult();

Eliminar un registro
Query 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'";
Query 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.

Volver a: Hibernate

Aviso Legal | Política de privacidad