Hibernate
Tutorial Hibernate: Asociación One To One
Hibernate asociación one to one: ejemplos. Domina la implementación de asociaciones one to one en Hibernate con ejemplos detallados.
Aprende Hibernate GRATIS y certifícateIntroducción
La asociación One To One en Hibernate es uno de los tipos de asociaciones entre entidades que representan una relación uno a uno entre dos tablas en una base de datos.
Es decir, un registro en la tabla A se relaciona con un solo registro en la tabla B y viceversa.
Configuración en Hibernate
La asociación One To One puede ser unidireccional o bidireccional.
Asociación unidireccional
Supóngase que se tienen dos entidades: Persona
y LicenciaConducir
.
import jakarta.persistence.*;
@Entity
public class Persona {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nombre;
@OneToOne
@JoinColumn(name = "licencia_id")
private LicenciaConducir licenciaConducir;
// getters y setters
}
import jakarta.persistence.*;
@Entity
public class LicenciaConducir {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String numeroLicencia;
// getters y setters
}
La anotación @OneToOne
indica que se trata de una relación uno a uno. @JoinColumn
especifica qué columna se debe usar como clave foránea. En este caso, la tabla Persona
tendrá una columna licencia_id
que será una clave foránea que hace referencia a la tabla LicenciaConducir
.
Asociación bidireccional
El atributo mappedBy
es crucial cuando se trata de relaciones bidireccionales en Hibernate. Sirve para definir el "lado no propietario" de la relación. Es decir, indica cuál de las dos entidades involucradas en una relación bidireccional es la que no controla directamente la asociación en la base de datos, pero aún necesita estar al tanto de ella.
Lado Propietario y Lado No Propietario: En una relación bidireccional, siempre hay un "lado propietario" y un "lado no propietario". El lado propietario es el que se encarga de actualizar la relación en la base de datos. Hibernate sólo considera la configuración del lado propietario cuando detecta cambios en la relación.
No se usa una columna extra: Cuando se usa mappedBy
, Hibernate sabe que no tiene que crear una columna adicional en la base de datos para esa relación. Si no se usa, Hibernate podría tratar de crear dos columnas de clave foránea en ambas tablas, lo que no es correcto en una relación One-To-One.
Valor de mappedBy
: El valor que se asigna al atributo mappedBy
es el nombre del atributo en la entidad propietaria que mantiene la relación. No es el nombre de la columna en la base de datos.
Siguiendo el ejemplo anterior de Persona
y LicenciaConducir
:
import jakarta.persistence.*;
@Entity
public class Persona {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nombre;
@OneToOne
@JoinColumn(name = "licencia_id")
private LicenciaConducir licenciaConducir;
// getters y setters
}
import jakarta.persistence.*;
@Entity
public class LicenciaConducir {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String numeroLicencia;
@OneToOne(mappedBy = "licenciaConducir")
private Persona persona;
// getters y setters
}
Aquí, la entidad Persona
es el lado propietario de la relación, porque tiene la anotación @JoinColumn
. Esto significa que es responsable de gestionar la clave foránea (licencia_id
) en la base de datos.
Por otro lado, LicenciaConducir
tiene el atributo mappedBy
con el valor "licenciaConducir", lo que indica que es el lado no propietario y que debe mirar el atributo licenciaConducir
en la entidad Persona
para entender la relación.
Ejercicios de esta lección Asociación One To One
Evalúa tus conocimientos de esta lección Asociación One To One 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 el concepto de la asociación One To One en Hibernate y cómo representa una relación uno a uno entre entidades.
- Aprender a configurar una asociación One To One unidireccional mediante anotaciones como
@OneToOne
y@JoinColumn
. - Conocer la diferencia entre el "lado propietario" y el "lado no propietario" en una relación bidireccional.
- Entender la importancia del atributo
mappedBy
en una relación bidireccional y cómo se utiliza para definir el lado no propietario de la relación. - Reconocer que en una relación One To One bidireccional, el atributo
mappedBy
evita la creación de una columna adicional en la base de datos y establece la referencia entre las entidades.