Hibernate: API Criteria de JPA
Explora el uso de Hibernate y la API Criteria de JPA para consultas dinámicas. Aprende cómo optimizar tus aplicaciones con ejemplos prácticos.
Aprende Hibernate GRATIS y certifícateLa API Criteria está diseñada para ser una alternativa a las consultas JPQL. Proporciona una forma tipada y segura en tiempo de compilación para construir consultas. Esto reduce los errores comunes como errores de sintaxis y proporciona una mayor flexibilidad.
Configuración inicial
Para utilizar la API Criteria, primero necesitamos crear una instancia de CriteriaBuilder
y CriteriaQuery
. Aquí tienes un ejemplo básico:
import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.CriteriaQuery;
import jakarta.persistence.criteria.Root;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class CriteriaExample {
public static void main(String[] args) {
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
CriteriaBuilder criteriaBuilder = session.getCriteriaBuilder();
CriteriaQuery<Employee> criteriaQuery = criteriaBuilder.createQuery(Employee.class);
Root<Employee> root = criteriaQuery.from(Employee.class);
criteriaQuery.select(root);
List<Employee> employees = session.createQuery(criteriaQuery).getResultList();
employees.forEach(System.out::println);
session.close();
sessionFactory.close();
}
}
En este ejemplo, CriteriaBuilder
es la fábrica para construir consultas. CriteriaQuery
define la consulta y Root
representa la entidad desde la que se hará la selección.
Filtrado de datos
La API Criteria permite aplicar filtros mediante el uso de predicados. Aquí mostramos cómo agregar condiciones:
criteriaQuery.where(criteriaBuilder.equal(root.get("department"), "Sales"));
Este código agrega una condición para filtrar empleados que pertenecen al departamento de ventas.
Combinación de predicados
Es posible combinar múltiples predicados usando los métodos and
y or
:
Predicate departmentPredicate = criteriaBuilder.equal(root.get("department"), "Sales");
Predicate salaryPredicate = criteriaBuilder.greaterThan(root.get("salary"), 50000);
criteriaQuery.where(criteriaBuilder.and(departmentPredicate, salaryPredicate));
En este caso, la consulta solo devolverá empleados del departamento de ventas con un salario superior a 50,000.
Ordenación de resultados
Para ordenar los resultados, se puede usar el método orderBy
:
criteriaQuery.orderBy(criteriaBuilder.asc(root.get("lastName")));
Este ejemplo ordena los resultados por el apellido en orden ascendente.
Paginación
La paginación es crucial para manejar grandes conjuntos de datos de manera eficiente. Hibernate permite paginar los resultados de la consulta de la siguiente manera:
Query<Employee> query = session.createQuery(criteriaQuery);
query.setFirstResult(0);
query.setMaxResults(10);
List<Employee> paginatedEmployees = query.getResultList();
Aquí, setFirstResult
define el índice del primer resultado y setMaxResults
define el número máximo de resultados a devolver.
Lecciones de este módulo de Hibernate
Lecciones de programación del módulo API Criteria de JPA del curso de Hibernate.
Ejercicios de programación en este módulo de Hibernate
Evalúa tus conocimientos en API Criteria de JPA con ejercicios de programación API Criteria de JPA de tipo Test, Puzzle, Código y Proyecto con VSCode.