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

Hibernate - Relaciones

  • 1.
  • 2.
    Relaciones de Objetos Soloen 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 Enlas 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 Siponen 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 Mapeoy 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 aUno Unidireccionales con Mapeos en XML
  • 8.
    Entidad Dirección public classDireccion implements Serializable { private long id; private String calle; private String codigoPostal; //Constructores, getters y setters }
  • 9.
    Entidad Persona public classPersona implements Serializable { private long id; private String nombre; private Direccion direccion; //Constructores, getters y setters }
  • 10.
    Mapeo de entidadDireccion <?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 EntidadPersona <?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ónUno a Uno <one-to-one name="direccion" />
  • 13.
    Operaciones en Cascada <one-to-onename="direccion" cascade="persist, delete"/> • persist • merge • save-update • delete • lock • refresh • evict • replicate • all • none
  • 14.
    Relaciones Uno aUno Bidireccionales con Mapeos en XML
  • 15.
    Entidad País public classPais implements Serializable { private int id; private String nombre; private Presidente presidente; //Constructores, getters y setters }
  • 16.
    Entidad Presidente public classPresidente implements Serializable { private int id; private String nombre; private Pais pais; //Constructores, getters y setters }
  • 17.
    Mapeo de Pais <hibernate-mapping> <classname="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 <?xmlversion="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 aUno Unidireccionales con Anotaciones
  • 20.
    Relaciones Uno auno con Anotaciones @OneToOne
  • 21.
    Dirección con Anotaciones @Entity publicclass 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 publicclass 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 publicclass 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 aUno Bidireccionales con Anotaciones
  • 25.
    Presidente con Anotaciones @Entity publicclass Presidente implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String nombre; @OneToOne private Pais pais; //Constructores, getters y setters }
  • 26.
  • 27.
    Relaciones Uno aMuchos Unidireccionales con Mapeos en XML
  • 28.
    Entidad Libro public classLibro implements Serializable { private long id; private String titulo; //Constructores, getters y setters }
  • 29.
    Entidad Persona public classPersona 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 <?xmlversion="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 Personaantes 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ónUno 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 aMuchos Bidireccionales con Mapeos en XML
  • 34.
    Modificando Libro public classLibro implements Serializable { private long id; private String titulo; private Persona persona; //Constructures, getters y setters }
  • 35.
    Relación Many toOne <many-to-one name="persona" column="ID_PERSONA" />
  • 36.
    Mapeo de Libro <?xmlversion="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 MuchosUnidireccionales con Anotaciones
  • 38.
    Relaciones Uno auno con Anotaciones @OneToMany
  • 39.
    Entidad Persona @Entity public classPersona 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 classLibro implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; private String titulo; //Constructores, getters y setters }
  • 41.
    Relaciones Uno a MuchosBidireccionales con Anotaciones
  • 42.
    Modificando Libro @Entity public classLibro 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 classPersona 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 aUno Relaciones Muchos a Uno
  • 45.
    Entidad CadenaTelevisiva public classCadenaTelevisiva implements Serializable { private long id; private String nombre; //Constructores, getters y setters }
  • 46.
    Entidad Televidente public classTelevidente implements Serializable { private long id; private String nombre; private CadenaTelevisiva cadenaFavorita; //Constructores, getters y setters }
  • 47.
    Relaciones Muchos aUno Unidireccionales con Mapeos en XML
  • 48.
    Mapeo de CadenaTelevisiva <?xmlversion="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 <?xmlversion="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 aUno Unidireccionales con Anotaciones
  • 51.
    Relaciones Uno auno con Anotaciones @ManyToOne ManyToOne
  • 52.
    Modificando Tevidente @Entity public classTelevidente implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; private String nombre; @ManyToOne private CadenaTelevisiva cadenaFavorita; //Constructores, getters y setters }
  • 53.
  • 54.
  • 55.
  • 56.
    Entidad Materia public classMateria implements Serializable { private long id; private String nombre; //Constructores, getters y setters }
  • 57.
    Entidad Estudiante public classEstudiante 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 aMuchos Unidireccionales con Mapeos en XML
  • 59.
    Mapeo de Materia <?xmlversion="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 <?xmlversion="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 aMuchos Bidireccionales con Mapeos en XML
  • 62.
    Modificando Materia public classMateria 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-mappingPUBLIC "-//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 MuchosUnidireccionales con Anotaciones
  • 65.
    Relaciones Uno auno con Anotaciones @ManyToMany
  • 66.
    Anotando Materia @Entity public classMateria implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; private String nombre; //Constuctores, getters y setters }
  • 67.
    Anotando Estudiante @Entity public classEstudiante 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 MuchosBidireccionales con Anotaciones
  • 69.
    Modificando Materia @Entity public classMateria 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
  • 72.