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.

icono de mandar un mailPreguntame lo que quieras!
Pablo Monteserín
contacta conmigoPablo Monteserín

El servicio de resolución de dudas técnicas es sólo para los usuarios premium. Si tienes cualquier otra duda, usa el formulario de contacto. ¡Gracias!