Saltar la navegación

10.- Consultas SQL.

Caso práctico

Ana ya ha aprendido como poder utilizar una base de datos relacional en una aplicación que utiliza clases persistentes. La pregunta que le surge ahora es ¿Cómo puedo realizar las consultas SQL con está forma de acceder a los datos?¿Puedo utilizar el select, insert, etc.?

Imagen de Ana de medio cuerpo.
Lupa buscando un texto en un documento.

Usando Hibernate, la ejecución de consultas SQL nativas se controla por medio de la interfaz SQLQuery, la cual se obtiene llamando a Session.createSQLQuery(). Las siguientes secciones describen cómo utilizar esta API para consultas

La consulta SQL más básica es para obtener a una lista de escalares (valores).

  • sess.createSQLQuery("SELECT * FROM Personas").list();
  • sess.createSQLQuery("SELECT ID,NOMBRE, EDAD FROM PERSONAS").list();

Estas retornarán una lista de objetos arrays (Object[]) con valores escalares para cada columna en la tabla PERSONAS. Hibernate utilizará ResultSetMetadata para deducir el orden real y los tipos de los valores escalares retornados.

Otro tipo de consulta más compleja, es la consulta de entidades. Para obtener los objetos entidades desde una consulta sql nativa, se utiliza por medio de addEntity().

  • sess.createSQLQuery("SELECT * FROM PERSONAS").addEntity(Persona.class);
  • sess.createSQLQuery("SELECT ID,NOMBRE,EDAD FROM PERSONAS").addEntity(Persona.class);

Se especifica esta consulta:

  • La cadena de consulta SQL.
  • La entidad devuelta por la consulta.

Asumiendo que Persona es mapeado como una clase con las columnas IDENTIFICACION, NOMBRE y FECHA DE NACIMIENTO las consultas anteriores devolverán una Lista en donde cada elemento es una entidad Persona.