Hibernate

Hibernate

Tutorial Hibernate: Carga de asociaciones en consultas con EntityGraph y anotaciones

Hibernate EntityGraph: mapeo y uso. Domina el uso de EntityGraph en Hibernate para el mapeo de entidades con ejemplos detallados.

Introducción

Además de definir EntityGraphs de manera programática, Hibernate permite definir EntityGraphs de manera estática utilizando anotaciones directamente en las clases de entidad. Esto proporciona una forma declarativa de especificar las cargas de entidades, que puede ser más limpia y menos propensa a errores en ciertos contextos.

Anotaciones

  • @NamedEntityGraph: Se utiliza para definir un EntityGraph a nivel de clase de entidad en JPA. Permite especificar un conjunto de atributos y relaciones que deben cargarse de manera Eager o Lazy cuando se utiliza el EntityGraph en una consulta. Puede contener múltiples @NamedAttributeNode y @NamedSubgraph para detallar la estructura del grafo.
  • @NamedAttributeNode: Define un atributo específico de una entidad que debe ser incluido en el EntityGraph. Puede ser un atributo simple o una relación a otra entidad. En caso de ser una relación, puede asociarse a un @NamedSubgraph para especificar más detalles sobre cómo cargar la entidad relacionada.
  • @NamedSubgraph: Se utiliza dentro de un @NamedAttributeNode cuando el atributo es una relación a otra entidad. Permite definir un subconjunto de atributos de la entidad relacionada que también deben cargarse de manera Eager o Lazy. Proporciona una manera de gestionar cargas más complejas y detalladas de entidades relacionadas dentro de un EntityGraph.

Ejemplo de anotación de una entidad mediante EntityGraph:

import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.NamedEntityGraph;
import jakarta.persistence.NamedAttributeNode;
import jakarta.persistence.NamedSubgraph;

@Entity
@NamedEntityGraph(
    name = "empleadoDetalle",
    attributeNodes = {
        @NamedAttributeNode(value = "nombre"),
        @NamedAttributeNode(value = "apellido"),
        @NamedAttributeNode(value = "departamento", subgraph = "departamentoDetalle")
    },
    subgraphs = {
        @NamedSubgraph(
            name = "departamentoDetalle",
            attributeNodes = {
                @NamedAttributeNode("nombre")
            }
        )
    }
)
public class Empleado {
    // campos de la entidad, getters y setters
}

Ejemplo de consulta:

import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityGraph;
import jakarta.persistence.TypedQuery;

EntityManager em = ...; // Obtener el EntityManager
EntityGraph<?> graph = em.getEntityGraph("empleadoDetalle");

TypedQuery<Empleado> query = em.createQuery("SELECT e FROM Empleado e WHERE e.id = :idEmpleado", Empleado.class);
query.setParameter("idEmpleado", 1);
query.setHint("jakarta.persistence.loadgraph", graph);
Empleado empleado = query.getSingleResult();

En este ejemplo, el EntityGraph llamado “empleadoDetalle” se utiliza para cargar un empleado con su nombre, apellido, y detalles del departamento asociado, de acuerdo con lo especificado en las anotaciones de la clase Empleado.

Otras anotaciones de EntityGraph usadas en JPA son:

  • @EntityGraph: Esta anotación se puede usar directamente en métodos de repositorios para definir dinámicamente un EntityGraph que se aplicará durante la ejecución de una consulta particular. Es común en Spring Data JPA.
  • @NamedEntityGraphs: Es una anotación contenedora que permite especificar múltiples @NamedEntityGraph en una sola clase de entidad. Esto es útil para definir diferentes configuraciones de carga de entidades en la misma clase según diferentes contextos o necesidades.
Certifícate en Hibernate con CertiDevs PLUS

Ejercicios de esta lección Carga de asociaciones en consultas con EntityGraph y anotaciones

Evalúa tus conocimientos de esta lección Carga de asociaciones en consultas con EntityGraph y anotaciones con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.

Consultas JPQL avanzadas

Hibernate
Código

Configuración con JPA

Hibernate
Test

Tipos de datos personalizados

Hibernate
Puzzle

Consultas Criteria avanzadas

Hibernate
Código

Operaciones en cascada

Hibernate
Test

Anotaciones JPA

Hibernate
Puzzle

Asociación Many To One

Hibernate
Test

Funciones en consultas JPQL

Hibernate
Código

Asociación Many To Many entre Actor y Pelicula

Hibernate
Código

Asociación One To Many entre Curso y Estudiante

Hibernate
Código

Tipos de datos básicos

Hibernate
Test

Consultas Criteria básicas

Hibernate
Código

Asociación Many To Many

Hibernate
Puzzle

CRUD de entidades con asociaciones

Hibernate
Proyecto

Optimización de asociaciones con carga lazy

Hibernate
Código

Asociación One To Many

Hibernate
Puzzle

Configuración con Maven

Hibernate
Test

Asociación One To One

Hibernate
Test

CRUD en Hibernate

Hibernate
Código

Operaciones en cascada

Hibernate
Puzzle

Introducción a Hibernate

Hibernate
Test

Atributos de tipo enum en entidades JPA

Hibernate
Código

Carga de asociaciones en consultas con EntityGraph

Hibernate
Código

Configuración con Gradle

Hibernate
Test

Asociación One To One entre Libro y Resumen

Hibernate
Código

Asociación One To Many

Hibernate
Test

Asociación Many To Many

Hibernate
Test

Creación de entidades

Hibernate
Test

Ciclo de vida de una entidad

Hibernate
Código

Consultas JPQL básicas

Hibernate
Código

Carga de asociaciones en consultas con EntityGraph y anotaciones

Hibernate
Código

Tipos de datos embebidos

Hibernate
Código

Asociación Many To One entre Paciente y Clinica

Hibernate
Código

Asociación Many To One

Hibernate
Puzzle

Optimización de consultas con DTOs

Hibernate
Código

Atributos @Transient en entidades

Hibernate
Código

Asociación One To One

Hibernate
Puzzle

Todas las lecciones de Hibernate

Accede a todas las lecciones de Hibernate y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

Introducción A Hibernate

Hibernate

Introducción Y Entorno

Configuración Hibernate Con Gradle

Hibernate

Introducción Y Entorno

Configuración Hibernate Con Maven

Hibernate

Introducción Y Entorno

Configuración Hibernate Con Jpa

Hibernate

Introducción Y Entorno

Creación De Entidades Jpa

Hibernate

Entidades Jpa Y Tipos De Datos

Tipos De Datos En Hibernate

Hibernate

Entidades Jpa Y Tipos De Datos

Atributos @Transient En Entidades

Hibernate

Entidades Jpa Y Tipos De Datos

Enums En Hibernate

Hibernate

Entidades Jpa Y Tipos De Datos

Tipos De Datos Embebidos

Hibernate

Entidades Jpa Y Tipos De Datos

Crud En Hibernate

Hibernate

Entidades Jpa Y Tipos De Datos

Ciclo De Vida De Una Entidad

Hibernate

Entidades Jpa Y Tipos De Datos

Asociación One To One

Hibernate

Asociaciones Entre Entidades

Asociación One To Many

Hibernate

Asociaciones Entre Entidades

Asociación Many To One

Hibernate

Asociaciones Entre Entidades

Asociación Many To Many

Hibernate

Asociaciones Entre Entidades

Operaciones En Cascada

Hibernate

Asociaciones Entre Entidades

Consultas Jpql Básicas

Hibernate

Consultas Hql Y Jpql

Consultas Jpql Avanzadas

Hibernate

Consultas Hql Y Jpql

Funciones En Consultas Jpql

Hibernate

Consultas Hql Y Jpql

Consultas Criteria Básicas

Hibernate

Api Criteria De Jpa

Consultas Criteria Avanzadas

Hibernate

Api Criteria De Jpa

Carga De Asociaciones En Consultas Con Entitygraph

Hibernate

Api Entitygraph

Carga De Asociaciones En Consultas Con Entitygraph Y Anotaciones

Hibernate

Api Entitygraph

Optimización De Consultas Con Dtos

Hibernate

Optimización

Optimización De Asociaciones Con Carga Lazy

Hibernate

Optimización

Certificados de superación de Hibernate

Supera todos los ejercicios de programación del curso de Hibernate y obtén certificados de superación para mejorar tu currículum y tu empleabilidad.

En esta lección

Objetivos de aprendizaje de esta lección

  1. Comprender cómo definir y utilizar EntityGraphs en Hibernate mediante anotaciones.
  2. Comprender la función de la anotación @NamedEntityGraph y cómo se utiliza para definir configuraciones de carga de entidades a nivel de clase.
  3. Aprender a emplear @NamedAttributeNode para especificar atributos individuales de una entidad que deben incluirse en un EntityGraph.
  4. Familiarizarse con el uso de @NamedSubgraph dentro de @NamedAttributeNode para definir un subconjunto de atributos de entidades relacionadas y gestionar cargas complejas de entidades.