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.
Aprende Hibernate GRATIS y certifícateIntroducció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.
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
Configuración con JPA
Tipos de datos personalizados
Consultas Criteria avanzadas
Operaciones en cascada
Anotaciones JPA
Asociación Many To One
Funciones en consultas JPQL
Asociación Many To Many entre Actor y Pelicula
Asociación One To Many entre Curso y Estudiante
Tipos de datos básicos
Consultas Criteria básicas
Asociación Many To Many
CRUD de entidades con asociaciones
Optimización de asociaciones con carga lazy
Asociación One To Many
Configuración con Maven
Asociación One To One
CRUD en Hibernate
Operaciones en cascada
Introducción a Hibernate
Atributos de tipo enum en entidades JPA
Carga de asociaciones en consultas con EntityGraph
Configuración con Gradle
Asociación One To One entre Libro y Resumen
Asociación One To Many
Asociación Many To Many
Creación de entidades
Ciclo de vida de una entidad
Consultas JPQL básicas
Carga de asociaciones en consultas con EntityGraph y anotaciones
Tipos de datos embebidos
Asociación Many To One entre Paciente y Clinica
Asociación Many To One
Optimización de consultas con DTOs
Atributos @Transient en entidades
Asociación One To One
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
Introducción Y Entorno
Configuración Hibernate Con Gradle
Introducción Y Entorno
Configuración Hibernate Con Maven
Introducción Y Entorno
Configuración Hibernate Con Jpa
Introducción Y Entorno
Creación De Entidades Jpa
Entidades Jpa Y Tipos De Datos
Tipos De Datos En Hibernate
Entidades Jpa Y Tipos De Datos
Atributos @Transient En Entidades
Entidades Jpa Y Tipos De Datos
Enums En Hibernate
Entidades Jpa Y Tipos De Datos
Tipos De Datos Embebidos
Entidades Jpa Y Tipos De Datos
Crud En Hibernate
Entidades Jpa Y Tipos De Datos
Ciclo De Vida De Una Entidad
Entidades Jpa Y Tipos De Datos
Asociación One To One
Asociaciones Entre Entidades
Asociación One To Many
Asociaciones Entre Entidades
Asociación Many To One
Asociaciones Entre Entidades
Asociación Many To Many
Asociaciones Entre Entidades
Operaciones En Cascada
Asociaciones Entre Entidades
Consultas Jpql Básicas
Consultas Hql Y Jpql
Consultas Jpql Avanzadas
Consultas Hql Y Jpql
Funciones En Consultas Jpql
Consultas Hql Y Jpql
Consultas Criteria Básicas
Api Criteria De Jpa
Consultas Criteria Avanzadas
Api Criteria De Jpa
Carga De Asociaciones En Consultas Con Entitygraph
Api Entitygraph
Carga De Asociaciones En Consultas Con Entitygraph Y Anotaciones
Api Entitygraph
Optimización De Consultas Con Dtos
Optimización
Optimización De Asociaciones Con Carga Lazy
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
- Comprender cómo definir y utilizar
EntityGraphs
en Hibernate mediante anotaciones. - 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. - Aprender a emplear
@NamedAttributeNode
para especificar atributos individuales de una entidad que deben incluirse en unEntityGraph
. - Familiarizarse con el uso de
@NamedSubgraph
dentro de@NamedAttributeNode
para definir un subconjunto de atributos de entidades relacionadas y gestionar cargas complejas de entidades.