Saltar al contenido principal
Hibernate
Especialización Avanzado certificado-hibernate-hql-jpql-criteria

Hibernate ORM: HQL, JPQL y Criteria API

Hibernate ·Backend·Bases de Datos

Curso centrado en la capa de consultas de Hibernate para equipos Java que construyen reporting, buscadores con filtros dinámicos y analítica operativa sobre modelos JPA empresariales. Aprendes a escribir consultas con el lenguaje propio del ORM, a usar la API tipada para consultas dinámicas, a recurrir al SQL nativo cuando es necesario y a proyectar resultados con DTOs y records. Al terminar resuelves consultas complejas, optimizadas y mantenibles sobre cualquier modelo de datos.

Evidencias FUNDAE Activación guiada Evaluación con IA Sin permanencia

¿Prefieres verlo en directo? Agenda una demo sin compromiso.

Formación corporativa: este curso se activa bajo pedido para tu organización. Adaptamos temario, calendario y modalidad (teleformación, aula virtual o mixto).

Contenido del curso

ORM de referencia para persistencia en el stack Java empresarial.

10 módulos 56 lecciones 18 ejercicios evaluados por IA 3 tests
  • Introducción a Hibernate Lección
  • Configuración Hibernate con Maven Lección
  • Configuración Hibernate con Gradle Lección
  • Configuración Hibernate con JPA Lección
  • Archivo persistence.xml y hibernate.cfg.xml Lección
  • SessionFactory, EntityManagerFactory y ciclo de vida Lección
  • Configuración de proyecto Hibernate Ejercicio

Detalles del curso

Hibernate ORM representa una de las implementaciones más maduras y utilizadas de la especificación JPA (Java Persistence API) en el ecosistema Java. Su capacidad para abstraer la complejidad de las operaciones de base de datos mediante un mapeo objeto-relacional ha convertido a esta tecnología en un estándar de facto para el desarrollo de aplicaciones empresariales.

El dominio de las consultas avanzadas en Hibernate constituye una competencia fundamental para cualquier desarrollador que aspire a crear aplicaciones robustas y eficientes. Más allá de las operaciones CRUD básicas, las consultas complejas permiten extraer, transformar y optimizar el acceso a datos de manera que las aplicaciones puedan escalar y mantener un rendimiento óptimo.

Fundamentos de consultas en Hibernate

Hibernate proporciona múltiples mecanismos para realizar consultas, cada uno con sus propias ventajas y casos de uso específicos. La Java Persistence Query Language (JPQL) ofrece una sintaxis familiar similar a SQL, pero operando sobre entidades y sus propiedades en lugar de tablas y columnas directamente.

@Entity
public class Empleado {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String nombre;
    private BigDecimal salario;
    
    @ManyToOne(fetch = FetchType.LAZY)
    private Departamento departamento;
    
    // constructores, getters y setters
}

Las consultas JPQL permiten expresar operaciones complejas de manera declarativa, manteniendo la independencia del motor de base de datos subyacente. Esta abstracción facilita la portabilidad del código entre diferentes sistemas de gestión de bases de datos.

String jpql = "SELECT e FROM Empleado e WHERE e.salario > :salarioMinimo";
List<Empleado> empleados = entityManager.createQuery(jpql, Empleado.class)
    .setParameter("salarioMinimo", new BigDecimal("50000"))
    .getResultList();

Evolución hacia consultas programáticas

La API Criteria representa un enfoque programático para la construcción de consultas, ofreciendo type-safety en tiempo de compilación y mayor flexibilidad para consultas dinámicas. Este mecanismo resulta especialmente valioso cuando las condiciones de búsqueda se determinan en tiempo de ejecución.

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Empleado> query = cb.createQuery(Empleado.class);
Root<Empleado> empleado = query.from(Empleado.class);

query.select(empleado)
     .where(cb.greaterThan(empleado.get("salario"), new BigDecimal("50000")));

List<Empleado> resultado = entityManager.createQuery(query).getResultList();

La construcción programática de consultas elimina los errores de sintaxis que pueden aparecer con strings de JPQL, trasladando la validación al momento de compilación. Esta característica resulta fundamental en aplicaciones donde la robustez y mantenibilidad del código son prioritarias.

Gestión inteligente de asociaciones

Uno de los aspectos más críticos en el rendimiento de aplicaciones que utilizan ORM es la gestión eficiente de asociaciones entre entidades. Hibernate implementa estrategias de carga lazy por defecto para asociaciones @OneToMany y @ManyToMany, evitando la carga innecesaria de datos relacionados.

@Entity
public class Departamento {
    @Id
    private Long id;
    
    private String nombre;
    
    @OneToMany(mappedBy = "departamento", fetch = FetchType.LAZY)
    private List<Empleado> empleados = new ArrayList<>();
}

Sin embargo, la carga lazy puede generar el problema N+1 cuando se accede a asociaciones dentro de bucles. La solución pasa por utilizar técnicas de optimización proactiva que cargan los datos necesarios en una sola consulta.

String jpql = "SELECT d FROM Departamento d JOIN FETCH d.empleados WHERE d.activo = true";
List<Departamento> departamentos = entityManager.createQuery(jpql, Departamento.class)
    .getResultList();

Optimización mediante DTOs y proyecciones

Las consultas con DTOs representan una técnica fundamental para optimizar el rendimiento cuando solo se necesita un subconjunto de datos de las entidades. Esta aproximación reduce significativamente la transferencia de datos y el consumo de memoria.

public class EmpleadoResumenDTO {
    private String nombre;
    private String departamento;
    private BigDecimal salario;
    
    public EmpleadoResumenDTO(String nombre, String departamento, BigDecimal salario) {
        this.nombre = nombre;
        this.departamento = departamento;
        this.salario = salario;
    }
}

La construcción de DTOs directamente en JPQL permite obtener únicamente los campos necesarios, evitando la hidratación completa de entidades cuando no es requerida.

String jpql = "SELECT new com.ejemplo.EmpleadoResumenDTO(e.nombre, d.nombre, e.salario) " +
              "FROM Empleado e JOIN e.departamento d";
List<EmpleadoResumenDTO> resumen = entityManager.createQuery(jpql, EmpleadoResumenDTO.class)
    .getResultList();

Control granular con EntityGraph

EntityGraph proporciona un mecanismo declarativo para especificar exactamente qué asociaciones deben cargarse en una consulta particular. Esta funcionalidad permite optimizar el rendimiento sin modificar las anotaciones de mapeo de las entidades.

EntityGraph<Empleado> graph = entityManager.createEntityGraph(Empleado.class);
graph.addAttributeNodes("departamento");
graph.addSubgraph("departamento").addAttributeNodes("ubicacion");

List<Empleado> empleados = entityManager.createQuery(
    "SELECT e FROM Empleado e", Empleado.class)
    .setHint("jakarta.persistence.fetchgraph", graph)
    .getResultList();

Los EntityGraphs pueden definirse tanto programáticamente como mediante anotaciones, ofreciendo flexibilidad para diferentes escenarios de uso. Esta aproximación permite mantener las configuraciones de carga por defecto mientras se especifican estrategias particulares para consultas específicas.

Llave en mano para empresas

¿Formación para tu equipo en esta tecnología?

Tú nos dices a quién formar y nosotros configuramos la plataforma con tu marca, damos de alta a tu gente, evaluamos las entregas con IA y te entregamos los certificados y los informes técnicos para tu gestor FUNDAE. Catálogo amplio con teleformación, aula virtual o mixto. Sin permanencia, sin coste de setup.

¿Prefieres verlo en directo? Agenda una demo.

Preguntas frecuentes

¿Hibernate ORM: HQL, JPQL y Criteria API es bonificable por FUNDAE para mi empresa?
Puede ser bonificable cuando la acción cumple los requisitos aplicables. La plataforma aporta evidencias técnicas: seguimiento de tiempos, registro de conexiones, foros, encuestas y certificados para que tu entidad organizadora o gestoría revise la documentación.
¿En qué modalidades se imparte Hibernate ORM: HQL, JPQL y Criteria API?
En tres modalidades: teleformación (online asíncrona), aula virtual privada en directo y mixta. Adaptamos temario, calendario y modalidad al equipo.
¿Se adapta Hibernate ORM: HQL, JPQL y Criteria API al nivel de mi equipo?
Sí. Adaptamos temario, calendario y modalidad al nivel y al stack del equipo, con ejercicios evaluados por IA y certificado verificable.
¿Cuánto tarda en activarse para mi empresa?
La activación corporativa estándar es rápida, sin coste de setup ni permanencia.