SlideShare una empresa de Scribd logo
Relaciones
Manejo de Relaciones con Hibernate
Relaciones de Objetos
Solo en raras ocasiones deberemos guardar un objeto
simple como lo vimos en el curso anterior.
Por lo regular guardamos grafos de objetos u objetos
relacionados con otros objetos.
En estos casos podemos querer que los objetos se
guarden, actualicen, o eliminen en el momento que lo
haga nuestro objeto principal
Tipos de Relaciones
En las bases de datos relacionales existen 4 tipos de
relaciones
• Uno a Uno
• Uno a Muchos
• Muchos a Uno
• Muchos a Muchos
Relaciones con Dirección
Si ponen direcciones a estas relaciones (unidireccional, o
bidireccional) se tienen 7 tipos de relaciones:
• Uno a uno unidireccional
• Uno a uno bidireccional
• Uno a muchos unidireccional
• Uno a muchos bidireccional
• Muchos a uno unidireccional
• muchos a muchos unidireccional
• Muchos a muchos bidireccional
Archivos de Mapeo y Anotaciones
Así como podemos indicar los elementos de las
entidades tanto en archivos de mapeo XML como en
anotaciones, los detalles de las relaciones también
podemos colocarlos de esta forma.
En este curso primero veremos cómo indicarlos con
archivos de mapeo y luego su equivalente en
anotaciones.
Unidireccional y Bidireccional
• Una relación es unidireccional cuando sólo una
entidad tiene una referencia a la otra.
• Una relación es bidireccional cuando ambas
entidades tienen una referencia a la otra.
En las relaciones unidireccionales solamente se
puede llegar de una entidad a la otra, no hay forma
de regresar.
Relaciones Uno a Uno
Unidireccionales con Mapeos
en XML
Entidad Dirección
public class Direccion implements Serializable
{
private long id;
private String calle;
private String codigoPostal;
//Constructores, getters y setters
}
Entidad Persona
public class Persona implements Serializable
{
private long id;
private String nombre;
private Direccion direccion;
//Constructores, getters y setters
}
Mapeo de entidad Direccion
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-
3.0.dtd">
<hibernate-mapping>
<class name="Direccion" table="DIRECCION">
<id name="id" column="ID">
<generator class="identity" />
</id>
<property name="calle" />
<property name="codigoPostal" />
</class>
</hibernate-mapping>
Mapeo de Entidad Persona
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="Persona" table="PERSONA">
<id name="id" column="ID">
<generator class="identity" />
</id>
<property name="nombre" />
</class>
</hibernate-mapping>
Mapeo de Relación Uno a Uno
<one-to-one name="direccion" />
Operaciones en Cascada
<one-to-one name="direccion" cascade="persist, delete"/>
• persist
• merge
• save-update
• delete
• lock
• refresh
• evict
• replicate
• all
• none
Relaciones Uno a Uno
Bidireccionales con Mapeos en
XML
Entidad País
public class Pais implements Serializable
{
private int id;
private String nombre;
private Presidente presidente;
//Constructores, getters y setters
}
Entidad Presidente
public class Presidente implements Serializable
{
private int id;
private String nombre;
private Pais pais;
//Constructores, getters y setters
}
Mapeo de Pais
<hibernate-mapping>
<class name="Pais" table="PAIS">
<id name="id" column="ID">
<generator class="identity" />
</id>
<property name="nombre" />
<one-to-one name="presidente" cascade="persist,delete"/>
</class>
</hibernate-mapping>
Mapeo de Presidente
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-
3.0.dtd">
<hibernate-mapping>
<class name="Presidente" table="PRESIDENTE">
<id name="id" column="ID">
<generator class="identity" />
</id>
<property name="nombre" />
<one-to-one name="pais" />
</class>
</hibernate-mapping>
Relaciones Uno a Uno
Unidireccionales con
Anotaciones
Relaciones Uno a uno con
Anotaciones
@OneToOne
Dirección con Anotaciones
@Entity
public class Direccion implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String calle;
private String codigoPostal;
//Constructores, getters y setters
}
Persona con Anotaciones
@Entity
public class Persona implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String nombre;
@OneToOne(cascade = { CascadeType.PERSIST,
CascadeType.REMOVE })
private Direccion direccion;
//Constructores, getters y setters
}
País con Anotaciones
@Entity
public class Pais implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String nombre;
@OneToOne(cascade = { CascadeType.PERSIST,
CascadeType.REMOVE })
private Presidente presidente;
//Constructores, getters y setters
}
Relaciones Uno a Uno
Bidireccionales con
Anotaciones
Presidente con Anotaciones
@Entity
public class Presidente implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String nombre;
@OneToOne
private Pais pais;
//Constructores, getters y setters
}
Relaciones uno a Muchos
Relaciones Uno a Muchos
Unidireccionales con Mapeos
en XML
Entidad Libro
public class Libro implements Serializable {
private long id;
private String titulo;
//Constructores, getters y setters
}
Entidad Persona
public class Persona implements Serializable {
private long id;
private String nombre;
private List<Libro> libros = new ArrayList<>();
//Constructores, getters y setters
public void addLibro(Libro libro)
{
this.libros.add(libro);
}
}
Mapeo de Libro
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="Libro" table="LIBRO">
<id name="id" column="ID">
<generator class="identity" />
</id>
<property name="titulo" />
</class>
</hibernate-mapping>
Mapeo de Persona antes de la
realación
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="Persona" table="PERSONA">
<id name="id" column="ID_PERSONA" >
<generator class="identity" />
</id>
<property name="nombre" />
</class>
</hibernate-mapping>
Mapeo de Relación Uno a Muchos
<list name="libros" cascade="all-delete-orphan">
<key column="ID_PERSONA" />
<index column="ORDEN" />
<one-to-many class="Libro" />
</list>
Relaciones Uno a Muchos
Bidireccionales con Mapeos en
XML
Modificando Libro
public class Libro implements Serializable
{
private long id;
private String titulo;
private Persona persona;
//Constructures, getters y setters
}
Relación Many to One
<many-to-one name="persona" column="ID_PERSONA" />
Mapeo de Libro
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-
3.0.dtd">
<hibernate-mapping>
<class name="Libro" table="LIBRO">
<id name="id" column="ID">
<generator class="identity" />
</id>
<property name="titulo" />
<many-to-one name="persona" column="ID_PERSONA" />
</class>
</hibernate-mapping>
Relaciones Uno a
Muchos Unidireccionales con
Anotaciones
Relaciones Uno a uno con
Anotaciones
@OneToMany
Entidad Persona
@Entity
public class Persona implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String nombre;
@OneToMany(cascade = CascadeType.ALL, fetch =
FetchType.EAGER)
private List<Libro> libros = new ArrayList<>();
//Constructores, getters y setters
}
Entidad Libro
@Entity
public class Libro implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String titulo;
//Constructores, getters y setters
}
Relaciones Uno a
Muchos Bidireccionales con
Anotaciones
Modificando Libro
@Entity
public class Libro implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String titulo;
@ManyToOne
private Persona persona;
//Constructores, getters y setters
}
Modificando Persona
@Entity
public class Persona implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String nombre;
@OneToMany(cascade = CascadeType.ALL, fetch =
FetchType.EAGER, mappedBy = "persona")
private List<Libro> libros = new ArrayList<>();
//Constructores, getters y setters
}
Relaciones Muchos a Uno
Relaciones Muchos a Uno
Entidad CadenaTelevisiva
public class CadenaTelevisiva implements Serializable
{
private long id;
private String nombre;
//Constructores, getters y setters
}
Entidad Televidente
public class Televidente implements Serializable {
private long id;
private String nombre;
private CadenaTelevisiva cadenaFavorita;
//Constructores, getters y setters
}
Relaciones Muchos a Uno
Unidireccionales con Mapeos
en XML
Mapeo de CadenaTelevisiva
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="CadenaTelevisiva" table="CADENA_TELEVISIVA">
<id name="id">
<generator class="identity" />
</id>
<property name="nombre" />
</class>
</hibernate-mapping>
Mapeo de Televidente
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="Televidente" table="TELEVIDENTE">
<id name="id">
<generator class="identity" />
</id>
<property name="nombre" />
<many-to-one name="cadenaFavorita" />
</class>
</hibernate-mapping>
Relaciones Muchos a Uno
Unidireccionales con
Anotaciones
Relaciones Uno a uno con
Anotaciones
@ManyToOne
ManyToOne
Modificando Tevidente
@Entity
public class Televidente implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String nombre;
@ManyToOne
private CadenaTelevisiva cadenaFavorita;
//Constructores, getters y setters
}
Relaciones Muchos a Muchos
Relaciones Muchos a Muchos (2)
Tabla de Enlace
Entidad Materia
public class Materia implements Serializable {
private long id;
private String nombre;
//Constructores, getters y setters
}
Entidad Estudiante
public class Estudiante implements Serializable {
private long id;
private String nombre;
private List<Materia> materias = new ArrayList<>();
//Constructores, getters y setters
public void addMateria(Materia materia)
{
this.materias.add(materia);
}
}
Relaciones Muchos a Muchos
Unidireccionales con Mapeos
en XML
Mapeo de Materia
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://ww.hibernate.org/dtd/hibernate-mapping-
3.0.dtd">
<hibernate-mapping>
<class name="Materia" table="MATERIA">
<id name="id">
<generator class="identity" />
</id>
<property name="nombre" />
</class>
</hibernate-mapping>
Mapeo de Estudiante
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="Estudiante" table="ESTJDIANTE">
<id name="id" column="ID_ESTUDIANTE">
<generator class="identity" />
</id>
<property name="nombre" />
<list name="materias" table="ESTUDIANTES_MATERIAS" cascade="all-delete-orphan" >
<key column="ID_ESTUDIANTE" />
<list-index column="ORDEN" />
<many-to-many class="Materia" column="ID_MATERIA" />
</list>
</class>
</hibernate-mapping>
Relaciones Mucho a Muchos
Bidireccionales con Mapeos en
XML
Modificando Materia
public class Materia implements Serializable {
private long id;
private String nombre;
private List<Estudiante> estudiantes = new ArrayList<>();
//Constructores, getters y setters
public void addEstudiante(Estudiante estudiante) {
this.estudiantes.add(estudiante);
estudiante.addMateria(this);
}
}
Materia.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="Materia" table="MATERIA">
<id name="id">
<generator class="identity" />
</id>
<property name="nombre" />
<list name="estudiantes" table="ESTUDIANTES_MATERIAS" inverse="true">
<key column="ID_MATERIA" />
<list-index column="ORDEN" />
<many-to-many class="Estudiante" column="ID_ESTUDIANTE" />
</list>
</class>
</hibernate-mapping>
Relaciones Muchos a
Muchos Unidireccionales con
Anotaciones
Relaciones Uno a uno con
Anotaciones
@ManyToMany
Anotando Materia
@Entity
public class Materia implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String nombre;
//Constuctores, getters y setters
}
Anotando Estudiante
@Entity
public class Estudiante implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String nombre;
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private List<Materia> materias = new ArrayList<>();
//Constuctores, getters y setters
}
Relaciones Muchos a
Muchos Bidireccionales con
Anotaciones
Modificando Materia
@Entity
public class Materia implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String nombre;
@ManyToMany(mappedBy="materias")
private List<Estudiante> estudiantes = new ArrayList<>();
//Constuctores, getters y setters
public void addEstudiante(Estudiante estudiante) {
this.estudiantes.add(estudiante);
estudiante.addMateria(this);
}
}
Resumen de Mapeos, un elemento
por tipo de relación
• <one-to-one>
• <many-to-one>
• <many-to-one>
• <list>, <set>, <map>, <bag>, <array> y <primitive-
array>
Resumen de Anotaciones, una
Anotación por cada Tipo de Relación
• @OneToOne
• @OneToMany
• @ManyToOne
• @ManyToMany
¿Alguna Pregunta?
72

Más contenido relacionado

PPT
Struktur data soal-latihan
DOCX
Metode interpolasi linier
PPTX
Materi statistika
DOCX
Rpp spldv
PDF
3. Pointer dan List Berkait Singly
DOCX
Aplikasi teori bilangan
PPTX
Limitkekontinuan stt-b
DOCX
FAKTORISASI FERMAT & DIOPHANTINE LINIER
Struktur data soal-latihan
Metode interpolasi linier
Materi statistika
Rpp spldv
3. Pointer dan List Berkait Singly
Aplikasi teori bilangan
Limitkekontinuan stt-b
FAKTORISASI FERMAT & DIOPHANTINE LINIER

La actualidad más candente (20)

DOCX
Aplikasi sistem persamaan diferensial_
PDF
Eliminasi gauss-jordan
PPTX
Sistem bilangan dan kesalahan
PPTX
Metode kofaktor
PDF
Pembahasan osn matematika smp 2014 tingkat kabupaten (bagian a pilihan ganda) 2
DOCX
Transformasi Peubah Acak dan Distribusinya
PDF
Modul Ajar Matematika kelas 12 kurikulum merdeka
PDF
Ejercicios de aritmética
PPTX
ISO DAN HOMOMORFISME.pptx
DOCX
Latihan soal struktur data
PDF
3 vektor-dan-operasinya-v2011
DOCX
PMW PISCOK KETAPEL
PPTX
Uji Run ( Keacakan )
DOCX
Sintaks model pembelajaran penemuan terbimbing
PDF
Fungsi Hash & Algoritma SHA-256
PDF
Kunci Jawaban kalkulus edisi 9[yunusFairVry.blogspot.com].pdf
PPTX
8. KD 3.2 Teorema Sisa 3.pptx
DOCX
MODUL PERTEMUAN 2 REFLEKSI.docx
DOCX
Distribusi Seragam, Bernoulli, dan Binomial
DOCX
Makalah irisan kerucut
Aplikasi sistem persamaan diferensial_
Eliminasi gauss-jordan
Sistem bilangan dan kesalahan
Metode kofaktor
Pembahasan osn matematika smp 2014 tingkat kabupaten (bagian a pilihan ganda) 2
Transformasi Peubah Acak dan Distribusinya
Modul Ajar Matematika kelas 12 kurikulum merdeka
Ejercicios de aritmética
ISO DAN HOMOMORFISME.pptx
Latihan soal struktur data
3 vektor-dan-operasinya-v2011
PMW PISCOK KETAPEL
Uji Run ( Keacakan )
Sintaks model pembelajaran penemuan terbimbing
Fungsi Hash & Algoritma SHA-256
Kunci Jawaban kalkulus edisi 9[yunusFairVry.blogspot.com].pdf
8. KD 3.2 Teorema Sisa 3.pptx
MODUL PERTEMUAN 2 REFLEKSI.docx
Distribusi Seragam, Bernoulli, dan Binomial
Makalah irisan kerucut
Publicidad

Similar a Hibernate - Relaciones (20)

PDF
Hibernate - JPA @luce 3
PPT
Curso de Desarrollo Web
PDF
Bases de Datos en Java - Intro a Hibernate
PPSX
Persistencia de objetos con Hibernate
PPSX
Persistencia De Objetos(Hibernate)
PDF
Persistencia de datos en JAVA. Conversión JPA
PDF
Orm presentación final
PDF
Hibernate - Introducción
PDF
Hibernate - JPA @luce
PPT
PDF
Manual JPA
PDF
Hibernate - JPA @luce 5
PDF
Manualjpa
PDF
Manualjpa
PDF
[ES] Manejadores de persistencia
PDF
Hibernate - JPA @luce 2
PPT
4. acceso a datos
PDF
Greach 2011 - Engrandeciendo Grails con Mongo DB
PPTX
P2C2 Introducción a JEE5
Hibernate - JPA @luce 3
Curso de Desarrollo Web
Bases de Datos en Java - Intro a Hibernate
Persistencia de objetos con Hibernate
Persistencia De Objetos(Hibernate)
Persistencia de datos en JAVA. Conversión JPA
Orm presentación final
Hibernate - Introducción
Hibernate - JPA @luce
Manual JPA
Hibernate - JPA @luce 5
Manualjpa
Manualjpa
[ES] Manejadores de persistencia
Hibernate - JPA @luce 2
4. acceso a datos
Greach 2011 - Engrandeciendo Grails con Mongo DB
P2C2 Introducción a JEE5
Publicidad

Más de programadorjavablog (20)

PPSX
Patrones de diseño(presentación 7)
PPSX
Uml (presentación 6)
PPSX
Conceptos de código limpio (presentación 5)
PPSX
Conceptos avanzados oo (presentación 4)
PPSX
Java 5 se (presentación3)
PPSX
Lenguaje java5 (presentación2)
PPSX
Conceptos poo (presentación1)
PPT
Curso scjp 30 navegacion de archivos e io
PPSX
Curso scjp 30 navegacion de archivos e io
PPSX
7iSF-4 test driver development
PPSX
7iSF-3 scrum
PPSX
PPSX
7iSF-1 ingeniería de software
PPSX
7iSF-6 temas extra
PPSX
PPT
Curso scjp 4 declaracion de clases
PPT
Curso scjp 3 identificadores y control de acceso
PPT
Curso scjp 2 recordatorio de java
PPSX
ICEFaces 2.0
Patrones de diseño(presentación 7)
Uml (presentación 6)
Conceptos de código limpio (presentación 5)
Conceptos avanzados oo (presentación 4)
Java 5 se (presentación3)
Lenguaje java5 (presentación2)
Conceptos poo (presentación1)
Curso scjp 30 navegacion de archivos e io
Curso scjp 30 navegacion de archivos e io
7iSF-4 test driver development
7iSF-3 scrum
7iSF-1 ingeniería de software
7iSF-6 temas extra
Curso scjp 4 declaracion de clases
Curso scjp 3 identificadores y control de acceso
Curso scjp 2 recordatorio de java
ICEFaces 2.0

Último (20)

PDF
Calidad desde el Docente y la mejora continua .pdf
PDF
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
PDF
SAP Transportation Management para LSP, TM140 Col18
PDF
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
PPTX
Propuesta BKP servidores con Acronis1.pptx
PPTX
REDES INFORMATICAS REDES INFORMATICAS.pptx
PPTX
Sesion 1 de microsoft power point - Clase 1
PDF
Estrategia de apoyo tecnología grado 9-3
PDF
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
PDF
Plantilla para Diseño de Narrativas Transmedia.pdf
PPTX
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
PDF
Maste clas de estructura metálica y arquitectura
PDF
Liceo departamental MICRO BIT (1) 2.pdfbbbnn
PDF
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
PPT
El-Gobierno-Electrónico-En-El-Estado-Bolivia
PPTX
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
PPT
Que son las redes de computadores y sus partes
PDF
Diapositiva proyecto de vida, materia catedra
PPTX
Presentación PASANTIAS AuditorioOO..pptx
PDF
taller de informática - LEY DE OHM
Calidad desde el Docente y la mejora continua .pdf
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
SAP Transportation Management para LSP, TM140 Col18
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
Propuesta BKP servidores con Acronis1.pptx
REDES INFORMATICAS REDES INFORMATICAS.pptx
Sesion 1 de microsoft power point - Clase 1
Estrategia de apoyo tecnología grado 9-3
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
Plantilla para Diseño de Narrativas Transmedia.pdf
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
Maste clas de estructura metálica y arquitectura
Liceo departamental MICRO BIT (1) 2.pdfbbbnn
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
El-Gobierno-Electrónico-En-El-Estado-Bolivia
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
Que son las redes de computadores y sus partes
Diapositiva proyecto de vida, materia catedra
Presentación PASANTIAS AuditorioOO..pptx
taller de informática - LEY DE OHM

Hibernate - Relaciones

  • 2. Relaciones de Objetos Solo en raras ocasiones deberemos guardar un objeto simple como lo vimos en el curso anterior. Por lo regular guardamos grafos de objetos u objetos relacionados con otros objetos. En estos casos podemos querer que los objetos se guarden, actualicen, o eliminen en el momento que lo haga nuestro objeto principal
  • 3. Tipos de Relaciones En las bases de datos relacionales existen 4 tipos de relaciones • Uno a Uno • Uno a Muchos • Muchos a Uno • Muchos a Muchos
  • 4. Relaciones con Dirección Si ponen direcciones a estas relaciones (unidireccional, o bidireccional) se tienen 7 tipos de relaciones: • Uno a uno unidireccional • Uno a uno bidireccional • Uno a muchos unidireccional • Uno a muchos bidireccional • Muchos a uno unidireccional • muchos a muchos unidireccional • Muchos a muchos bidireccional
  • 5. Archivos de Mapeo y Anotaciones Así como podemos indicar los elementos de las entidades tanto en archivos de mapeo XML como en anotaciones, los detalles de las relaciones también podemos colocarlos de esta forma. En este curso primero veremos cómo indicarlos con archivos de mapeo y luego su equivalente en anotaciones.
  • 6. Unidireccional y Bidireccional • Una relación es unidireccional cuando sólo una entidad tiene una referencia a la otra. • Una relación es bidireccional cuando ambas entidades tienen una referencia a la otra. En las relaciones unidireccionales solamente se puede llegar de una entidad a la otra, no hay forma de regresar.
  • 7. Relaciones Uno a Uno Unidireccionales con Mapeos en XML
  • 8. Entidad Dirección public class Direccion implements Serializable { private long id; private String calle; private String codigoPostal; //Constructores, getters y setters }
  • 9. Entidad Persona public class Persona implements Serializable { private long id; private String nombre; private Direccion direccion; //Constructores, getters y setters }
  • 10. Mapeo de entidad Direccion <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping- 3.0.dtd"> <hibernate-mapping> <class name="Direccion" table="DIRECCION"> <id name="id" column="ID"> <generator class="identity" /> </id> <property name="calle" /> <property name="codigoPostal" /> </class> </hibernate-mapping>
  • 11. Mapeo de Entidad Persona <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="Persona" table="PERSONA"> <id name="id" column="ID"> <generator class="identity" /> </id> <property name="nombre" /> </class> </hibernate-mapping>
  • 12. Mapeo de Relación Uno a Uno <one-to-one name="direccion" />
  • 13. Operaciones en Cascada <one-to-one name="direccion" cascade="persist, delete"/> • persist • merge • save-update • delete • lock • refresh • evict • replicate • all • none
  • 14. Relaciones Uno a Uno Bidireccionales con Mapeos en XML
  • 15. Entidad País public class Pais implements Serializable { private int id; private String nombre; private Presidente presidente; //Constructores, getters y setters }
  • 16. Entidad Presidente public class Presidente implements Serializable { private int id; private String nombre; private Pais pais; //Constructores, getters y setters }
  • 17. Mapeo de Pais <hibernate-mapping> <class name="Pais" table="PAIS"> <id name="id" column="ID"> <generator class="identity" /> </id> <property name="nombre" /> <one-to-one name="presidente" cascade="persist,delete"/> </class> </hibernate-mapping>
  • 18. Mapeo de Presidente <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping- 3.0.dtd"> <hibernate-mapping> <class name="Presidente" table="PRESIDENTE"> <id name="id" column="ID"> <generator class="identity" /> </id> <property name="nombre" /> <one-to-one name="pais" /> </class> </hibernate-mapping>
  • 19. Relaciones Uno a Uno Unidireccionales con Anotaciones
  • 20. Relaciones Uno a uno con Anotaciones @OneToOne
  • 21. Dirección con Anotaciones @Entity public class Direccion implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; private String calle; private String codigoPostal; //Constructores, getters y setters }
  • 22. Persona con Anotaciones @Entity public class Persona implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; private String nombre; @OneToOne(cascade = { CascadeType.PERSIST, CascadeType.REMOVE }) private Direccion direccion; //Constructores, getters y setters }
  • 23. País con Anotaciones @Entity public class Pais implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String nombre; @OneToOne(cascade = { CascadeType.PERSIST, CascadeType.REMOVE }) private Presidente presidente; //Constructores, getters y setters }
  • 24. Relaciones Uno a Uno Bidireccionales con Anotaciones
  • 25. Presidente con Anotaciones @Entity public class Presidente implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String nombre; @OneToOne private Pais pais; //Constructores, getters y setters }
  • 27. Relaciones Uno a Muchos Unidireccionales con Mapeos en XML
  • 28. Entidad Libro public class Libro implements Serializable { private long id; private String titulo; //Constructores, getters y setters }
  • 29. Entidad Persona public class Persona implements Serializable { private long id; private String nombre; private List<Libro> libros = new ArrayList<>(); //Constructores, getters y setters public void addLibro(Libro libro) { this.libros.add(libro); } }
  • 30. Mapeo de Libro <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="Libro" table="LIBRO"> <id name="id" column="ID"> <generator class="identity" /> </id> <property name="titulo" /> </class> </hibernate-mapping>
  • 31. Mapeo de Persona antes de la realación <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="Persona" table="PERSONA"> <id name="id" column="ID_PERSONA" > <generator class="identity" /> </id> <property name="nombre" /> </class> </hibernate-mapping>
  • 32. Mapeo de Relación Uno a Muchos <list name="libros" cascade="all-delete-orphan"> <key column="ID_PERSONA" /> <index column="ORDEN" /> <one-to-many class="Libro" /> </list>
  • 33. Relaciones Uno a Muchos Bidireccionales con Mapeos en XML
  • 34. Modificando Libro public class Libro implements Serializable { private long id; private String titulo; private Persona persona; //Constructures, getters y setters }
  • 35. Relación Many to One <many-to-one name="persona" column="ID_PERSONA" />
  • 36. Mapeo de Libro <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping- 3.0.dtd"> <hibernate-mapping> <class name="Libro" table="LIBRO"> <id name="id" column="ID"> <generator class="identity" /> </id> <property name="titulo" /> <many-to-one name="persona" column="ID_PERSONA" /> </class> </hibernate-mapping>
  • 37. Relaciones Uno a Muchos Unidireccionales con Anotaciones
  • 38. Relaciones Uno a uno con Anotaciones @OneToMany
  • 39. Entidad Persona @Entity public class Persona implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; private String nombre; @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) private List<Libro> libros = new ArrayList<>(); //Constructores, getters y setters }
  • 40. Entidad Libro @Entity public class Libro implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; private String titulo; //Constructores, getters y setters }
  • 41. Relaciones Uno a Muchos Bidireccionales con Anotaciones
  • 42. Modificando Libro @Entity public class Libro implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; private String titulo; @ManyToOne private Persona persona; //Constructores, getters y setters }
  • 43. Modificando Persona @Entity public class Persona implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; private String nombre; @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "persona") private List<Libro> libros = new ArrayList<>(); //Constructores, getters y setters }
  • 44. Relaciones Muchos a Uno Relaciones Muchos a Uno
  • 45. Entidad CadenaTelevisiva public class CadenaTelevisiva implements Serializable { private long id; private String nombre; //Constructores, getters y setters }
  • 46. Entidad Televidente public class Televidente implements Serializable { private long id; private String nombre; private CadenaTelevisiva cadenaFavorita; //Constructores, getters y setters }
  • 47. Relaciones Muchos a Uno Unidireccionales con Mapeos en XML
  • 48. Mapeo de CadenaTelevisiva <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="CadenaTelevisiva" table="CADENA_TELEVISIVA"> <id name="id"> <generator class="identity" /> </id> <property name="nombre" /> </class> </hibernate-mapping>
  • 49. Mapeo de Televidente <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="Televidente" table="TELEVIDENTE"> <id name="id"> <generator class="identity" /> </id> <property name="nombre" /> <many-to-one name="cadenaFavorita" /> </class> </hibernate-mapping>
  • 50. Relaciones Muchos a Uno Unidireccionales con Anotaciones
  • 51. Relaciones Uno a uno con Anotaciones @ManyToOne ManyToOne
  • 52. Modificando Tevidente @Entity public class Televidente implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; private String nombre; @ManyToOne private CadenaTelevisiva cadenaFavorita; //Constructores, getters y setters }
  • 54. Relaciones Muchos a Muchos (2)
  • 56. Entidad Materia public class Materia implements Serializable { private long id; private String nombre; //Constructores, getters y setters }
  • 57. Entidad Estudiante public class Estudiante implements Serializable { private long id; private String nombre; private List<Materia> materias = new ArrayList<>(); //Constructores, getters y setters public void addMateria(Materia materia) { this.materias.add(materia); } }
  • 58. Relaciones Muchos a Muchos Unidireccionales con Mapeos en XML
  • 59. Mapeo de Materia <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://ww.hibernate.org/dtd/hibernate-mapping- 3.0.dtd"> <hibernate-mapping> <class name="Materia" table="MATERIA"> <id name="id"> <generator class="identity" /> </id> <property name="nombre" /> </class> </hibernate-mapping>
  • 60. Mapeo de Estudiante <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="Estudiante" table="ESTJDIANTE"> <id name="id" column="ID_ESTUDIANTE"> <generator class="identity" /> </id> <property name="nombre" /> <list name="materias" table="ESTUDIANTES_MATERIAS" cascade="all-delete-orphan" > <key column="ID_ESTUDIANTE" /> <list-index column="ORDEN" /> <many-to-many class="Materia" column="ID_MATERIA" /> </list> </class> </hibernate-mapping>
  • 61. Relaciones Mucho a Muchos Bidireccionales con Mapeos en XML
  • 62. Modificando Materia public class Materia implements Serializable { private long id; private String nombre; private List<Estudiante> estudiantes = new ArrayList<>(); //Constructores, getters y setters public void addEstudiante(Estudiante estudiante) { this.estudiantes.add(estudiante); estudiante.addMateria(this); } }
  • 63. Materia.hbm.xml <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="Materia" table="MATERIA"> <id name="id"> <generator class="identity" /> </id> <property name="nombre" /> <list name="estudiantes" table="ESTUDIANTES_MATERIAS" inverse="true"> <key column="ID_MATERIA" /> <list-index column="ORDEN" /> <many-to-many class="Estudiante" column="ID_ESTUDIANTE" /> </list> </class> </hibernate-mapping>
  • 64. Relaciones Muchos a Muchos Unidireccionales con Anotaciones
  • 65. Relaciones Uno a uno con Anotaciones @ManyToMany
  • 66. Anotando Materia @Entity public class Materia implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; private String nombre; //Constuctores, getters y setters }
  • 67. Anotando Estudiante @Entity public class Estudiante implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; private String nombre; @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) private List<Materia> materias = new ArrayList<>(); //Constuctores, getters y setters }
  • 68. Relaciones Muchos a Muchos Bidireccionales con Anotaciones
  • 69. Modificando Materia @Entity public class Materia implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; private String nombre; @ManyToMany(mappedBy="materias") private List<Estudiante> estudiantes = new ArrayList<>(); //Constuctores, getters y setters public void addEstudiante(Estudiante estudiante) { this.estudiantes.add(estudiante); estudiante.addMateria(this); } }
  • 70. Resumen de Mapeos, un elemento por tipo de relación • <one-to-one> • <many-to-one> • <many-to-one> • <list>, <set>, <map>, <bag>, <array> y <primitive- array>
  • 71. Resumen de Anotaciones, una Anotación por cada Tipo de Relación • @OneToOne • @OneToMany • @ManyToOne • @ManyToMany