Consultas
En Hibernate, podemos utilizar la API de Session para crear consultas personalizadas para recuperar datos de la base de datos. La forma más común de crear consultas personalizadas es a través del método createQuery de la interfaz Session.
La sintaxis básica para crear una consulta con createQuery es la siguiente:
Query query = session.createQuery("FROM MiEntidad WHERE propiedad = :valor");
query.setParameter("valor", valor);
List<MiEntidad> resultados = query.list();
En este ejemplo, estamos creando una consulta personalizada para la entidad MiEntidad, donde queremos recuperar todos los registros donde la propiedad es igual a un valor específico. Usamos la sintaxis de JPQL (Java Persistence Query Language) para definir la consulta, que es similar a SQL pero utiliza nombres de entidad y propiedad en lugar de nombres de tabla y columna.
La consulta personalizada se asigna a un objeto Query, que podemos usar para establecer parámetros de consulta y ejecutar la consulta. En este caso, estamos estableciendo un parámetro llamado "valor" y luego usando el método list para recuperar los resultados de la consulta como una lista de objetos MiEntidad.
Veamos algunos ejemplos más detallados de cómo utilizar createQuery en Hibernate:
Consulta básica
Query query = session.createQuery("FROM MiEntidad");
List<MiEntidad> resultados = query.list();
Este ejemplo muestra cómo recuperar todos los registros de la entidad MiEntidad sin ningún filtro específico. La consulta JPQL es simplemente "FROM MiEntidad".
Consulta con filtro de propiedad
Query query = session.createQuery("FROM MiEntidad WHERE propiedad = :valor");
query.setParameter("valor", valor);
List<MiEntidad> resultados = query.list();
En este ejemplo, estamos recuperando todos los registros de la entidad MiEntidad donde la propiedad es igual a un valor específico. La consulta JPQL es "FROM MiEntidad WHERE propiedad = :valor". Usamos el método setParameter para establecer el valor del parámetro "valor".
Consulta con ordenamiento
Query query = session.createQuery("FROM MiEntidad ORDER BY propiedad DESC");
List<MiEntidad> resultados = query.list();
Este ejemplo muestra cómo recuperar todos los registros de la entidad MiEntidad y ordenarlos por una propiedad específica en orden descendente. La consulta JPQL es "FROM MiEntidad ORDER BY propiedad DESC".
Consulta con paginación
Query query = session.createQuery("FROM MiEntidad");
query.setFirstResult(0);
query.setMaxResults(10);
List<MiEntidad> resultados = query.list();
En este ejemplo, estamos recuperando los primeros 10 registros de la entidad MiEntidad utilizando la paginación. La consulta JPQL es "FROM MiEntidad". Usamos los métodos setFirstResult y setMaxResults para especificar la posición inicial de los resultados y el número máximo de resultados a recuperar.
Consulta con agregación
Query query = session.createQuery("SELECT COUNT(*) FROM MiEntidad");
Long cantidad = (Long) query.uniqueResult();
Este ejemplo muestra cómo recuperar la cantidad de registros de la entidad MiEntidad utilizando una consulta de agregación. La consulta JPQL es "SELECT COUNT(*) FROM MiEntidad". Usamos el método uniqueResult para obtener el resultado de la consulta como un objeto Long.