HIBERNATE - jtech.ua.es · Especialista Universitario Java Enterprise Hibernate © 2006-2007 Depto....
Transcript of HIBERNATE - jtech.ua.es · Especialista Universitario Java Enterprise Hibernate © 2006-2007 Depto....
![Page 1: HIBERNATE - jtech.ua.es · Especialista Universitario Java Enterprise Hibernate © 2006-2007 Depto. Ciencia de la Computación e IA Relaciones entre objetos -2 Puntos a tratar](https://reader033.fdocuments.net/reader033/viewer/2022042121/5e9adc659ac1da0e60632a26/html5/thumbnails/1.jpg)
Hibernate © 2006-2007 Depto. Ciencia de la Computación e IA Relaciones entre objetos
Especialista Universitario Java Enterprise
HIBERNATE
Sesión 3: Relaciones entre objetos
![Page 2: HIBERNATE - jtech.ua.es · Especialista Universitario Java Enterprise Hibernate © 2006-2007 Depto. Ciencia de la Computación e IA Relaciones entre objetos -2 Puntos a tratar](https://reader033.fdocuments.net/reader033/viewer/2022042121/5e9adc659ac1da0e60632a26/html5/thumbnails/2.jpg)
Especialista Universitario Java Enterprise
Hibernate © 2006-2007 Depto. Ciencia de la Computación e IA Relaciones entre objetos -2
Puntos a tratar• Persistencia transitiva• Composición• Herencia• Asociaciones
![Page 3: HIBERNATE - jtech.ua.es · Especialista Universitario Java Enterprise Hibernate © 2006-2007 Depto. Ciencia de la Computación e IA Relaciones entre objetos -2 Puntos a tratar](https://reader033.fdocuments.net/reader033/viewer/2022042121/5e9adc659ac1da0e60632a26/html5/thumbnails/3.jpg)
Especialista Universitario Java Enterprise
Hibernate © 2006-2007 Depto. Ciencia de la Computación e IA Relaciones entre objetos -3
Persistencia transitiva• Nos permite propagar la persistencia a
subgrafos transient o detached de forma automática• Trabajamos con grafos de objetos debido a las
relaciones entre clases • Hibernate NO navega (por defecto) a través de
las asociaciones• Para "activar" la persistencia transitiva en
asociaciones:• Asignamos un valor a cascade distinto de "none"• cascade="all,delete-orphan" ⇒ Relación padre/hijo
![Page 4: HIBERNATE - jtech.ua.es · Especialista Universitario Java Enterprise Hibernate © 2006-2007 Depto. Ciencia de la Computación e IA Relaciones entre objetos -2 Puntos a tratar](https://reader033.fdocuments.net/reader033/viewer/2022042121/5e9adc659ac1da0e60632a26/html5/thumbnails/4.jpg)
Especialista Universitario Java Enterprise
Hibernate © 2006-2007 Depto. Ciencia de la Computación e IA Relaciones entre objetos -4
Composición
Componente con dirección facturas
Componente con dirección personal
USER_ID <<PK>>USERNAME...CALLE_FACTURACOD_FACTURACIUDAD_FACTURACALLE_PERSCOD_PERSCALLE_PERS
<<Tabla>>USUARIO
nombre: Stringapellidos: Stringlogin: Stringclave: Stringemail: Stringtipo: intcreado: Date
Usuario
calle: StringcodPostal: Stringciudad: String
Direccionfacturas
personal
value type
entity type
![Page 5: HIBERNATE - jtech.ua.es · Especialista Universitario Java Enterprise Hibernate © 2006-2007 Depto. Ciencia de la Computación e IA Relaciones entre objetos -2 Puntos a tratar](https://reader033.fdocuments.net/reader033/viewer/2022042121/5e9adc659ac1da0e60632a26/html5/thumbnails/5.jpg)
Especialista Universitario Java Enterprise
Hibernate © 2006-2007 Depto. Ciencia de la Computación e IA Relaciones entre objetos -5
Mapeado para la composición<class name="Usuario" table="USUARIO">
<id name="id" column="USER_ID" type="long"><generatorclass="native"/> </id>
<propertyname="nombre" column="USERNAME" type="string"/>
<component name="direccionPersonal" class="Direccion"><property name="calle" type="string"
column="CALLE_PERS" not-null="true"/> <property name="ciudad" type="string"
column="CIUDAD_PERS" not-null="true"/> <property name="codPostal" type="short"
column="COD_PERS" not-null="true"/> </component>
<component name="direccionFacturas" class="Direccion"> ...</component>
</class>
![Page 6: HIBERNATE - jtech.ua.es · Especialista Universitario Java Enterprise Hibernate © 2006-2007 Depto. Ciencia de la Computación e IA Relaciones entre objetos -2 Puntos a tratar](https://reader033.fdocuments.net/reader033/viewer/2022042121/5e9adc659ac1da0e60632a26/html5/thumbnails/6.jpg)
Especialista Universitario Java Enterprise
Hibernate © 2006-2007 Depto. Ciencia de la Computación e IA Relaciones entre objetos -6
Herencia
propietario: Stringnumero: Stringcreada: Date
DetallesCuenta
tipo: intcaducMesl: StringcaducAnyo: String
Tarjeta
nombreBanco: Stringcif: String
CuentaBancaria
DET_CUENTA_ID <<PK>>PROPIETARIONUMEROCREADA
<<Tabla>>DETALLES_CUENTA
TARJ_CREDITO_ID <<PK>> <<FK>>TIPOCAD_MESCAD_ANYO
<<Tabla>>TARJETA_CREDITO
CTA_BANK_ID <<PK>> <<FK>>NOMBRECIF
<<Tabla>>CUENTA_BANCARIA
![Page 7: HIBERNATE - jtech.ua.es · Especialista Universitario Java Enterprise Hibernate © 2006-2007 Depto. Ciencia de la Computación e IA Relaciones entre objetos -2 Puntos a tratar](https://reader033.fdocuments.net/reader033/viewer/2022042121/5e9adc659ac1da0e60632a26/html5/thumbnails/7.jpg)
Especialista Universitario Java Enterprise
Hibernate © 2006-2007 Depto. Ciencia de la Computación e IA Relaciones entre objetos -7
Mapeado para la herencia<hibernate-mapping>
<class name="DetallesCuenta" table="DETALLES_CUENTA"> <id name="id" column="DET_CUENTA_ID" type="long">
<generator class="native"/> </id> <property name="propietario" column="PROPIETARIO"
type="string"/> <joined-subclass name="Tarjeta" table="TARJETA_CREDITO">
<key column="TARJ_CRED_ID"/> <property name="tipo" column="TIPO"/>
... </joined-subclass> <joined-subclass name="CuentaBancaria" table="CUENTA_BANCARIA"> ... </joined-subclass>
</class> <hibernate-mapping>
![Page 8: HIBERNATE - jtech.ua.es · Especialista Universitario Java Enterprise Hibernate © 2006-2007 Depto. Ciencia de la Computación e IA Relaciones entre objetos -2 Puntos a tratar](https://reader033.fdocuments.net/reader033/viewer/2022042121/5e9adc659ac1da0e60632a26/html5/thumbnails/8.jpg)
Especialista Universitario Java Enterprise
Hibernate © 2006-2007 Depto. Ciencia de la Computación e IA Relaciones entre objetos -8
Asociaciones• Las asociaciones en Hibernate son
inherentemente unidireccionales• Hibernate NO gestiona asociaciones
persistentes• Si una asociación es bidireccional, no importa la
multiplicidad, se deben considerar ambos extremos de la relación
![Page 9: HIBERNATE - jtech.ua.es · Especialista Universitario Java Enterprise Hibernate © 2006-2007 Depto. Ciencia de la Computación e IA Relaciones entre objetos -2 Puntos a tratar](https://reader033.fdocuments.net/reader033/viewer/2022042121/5e9adc659ac1da0e60632a26/html5/thumbnails/9.jpg)
Especialista Universitario Java Enterprise
Hibernate © 2006-2007 Depto. Ciencia de la Computación e IA Relaciones entre objetos -9
Asociación many-to-one (unidireccional)Implementación Java
publicclass Puja{ ... private Articulo articulo;
public void setArticulo(Articulo articulo) { this.articulo = articulo; }
public Articulo getArticulo() { return articulo; }
... }
publicclass Articulo{ private Long id; ...
publicLong getId() { returnid; }
publicvoidsetId(Longid) { this.id = id; }
... }
PujaArticulo1..1 0..*
![Page 10: HIBERNATE - jtech.ua.es · Especialista Universitario Java Enterprise Hibernate © 2006-2007 Depto. Ciencia de la Computación e IA Relaciones entre objetos -2 Puntos a tratar](https://reader033.fdocuments.net/reader033/viewer/2022042121/5e9adc659ac1da0e60632a26/html5/thumbnails/10.jpg)
Especialista Universitario Java Enterprise
Hibernate © 2006-2007 Depto. Ciencia de la Computación e IA Relaciones entre objetos -10
Asociación many-to-one (unidireccional)Mapeado Hibernate
<classname="Puja" table="PUJA"> <idname="id" column="PUJA_ID"> <generatorclass="native"> </id> ... <many-to-one name="articulo" column="ARTICULO_ID" class="Articulo"
not-null="true"/> </class>
<classname="Articulo" table="ARTICULO"> <idname="id" column="ARTICULO_ID"> <generator class="native"/> </id>
... </class>
ARTICULO_ID <<PK>> NOMBREDESCRIPCIONPRECIO_INICIAL
<<Tabla>>ARTICULO
PUJA_ID <<PK>> ARTICULO_ID <<FK>>CANTIDAD
<<Tabla>>PUJA
![Page 11: HIBERNATE - jtech.ua.es · Especialista Universitario Java Enterprise Hibernate © 2006-2007 Depto. Ciencia de la Computación e IA Relaciones entre objetos -2 Puntos a tratar](https://reader033.fdocuments.net/reader033/viewer/2022042121/5e9adc659ac1da0e60632a26/html5/thumbnails/11.jpg)
Especialista Universitario Java Enterprise
Hibernate © 2006-2007 Depto. Ciencia de la Computación e IA Relaciones entre objetos -11
Asociación many-to-one (one-to-many) bidireccionalImplementación Java
publicclass Articulo{ ... private Set pujas = new HashSet();publicvoidsetPujas(Set pujas) { this.pujas = pujas; }
public Set getPujas() { return pujas; }
publicvoidaddPuja(Pujapuja) { puja.setArticulo(this); pujas.add(puja);
} ...
}
publicclass Puja{ ... private Articulo articulo;
public void setArticulo(Articulo articulo) { this.articulo = articulo; }
public Articulo getArticulo() { return articulo; }
... }
![Page 12: HIBERNATE - jtech.ua.es · Especialista Universitario Java Enterprise Hibernate © 2006-2007 Depto. Ciencia de la Computación e IA Relaciones entre objetos -2 Puntos a tratar](https://reader033.fdocuments.net/reader033/viewer/2022042121/5e9adc659ac1da0e60632a26/html5/thumbnails/12.jpg)
Especialista Universitario Java Enterprise
Hibernate © 2006-2007 Depto. Ciencia de la Computación e IA Relaciones entre objetos -12
Asociación many-to-one (one-to-many) bidireccionalMapeado Hibernate
<class name="Articulo" table="ARTICULO">
... <setname="pujas"
inverse="true" cascade="all-delete-orphan"> <key column="ARTICULO_ID"/> <one-to-many class="Puja"/>
<set/> </class>
<class name="Puja" table="PUJA"> <id name="id" column="PUJA_ID"> <generatorclass="native"> </id> ... <many-to-one name="articulo"
column="ARTICULO_ID" class="Articulo" not-null="true"/>
</class>
![Page 13: HIBERNATE - jtech.ua.es · Especialista Universitario Java Enterprise Hibernate © 2006-2007 Depto. Ciencia de la Computación e IA Relaciones entre objetos -2 Puntos a tratar](https://reader033.fdocuments.net/reader033/viewer/2022042121/5e9adc659ac1da0e60632a26/html5/thumbnails/13.jpg)
Especialista Universitario Java Enterprise
Hibernate © 2006-2007 Depto. Ciencia de la Computación e IA Relaciones entre objetos -13
Asociaciones bidireccionales• Todas las asociaciones bidireccionales
necesitan que uno de sus extremos sea marcado como inverse. • En many-to-one/one-to-many se marcará el extremo
many• En many-to-many podemos elegir cualquiera
• Los cambios realizados solamente en el extremo de la asociación marcado como inverse no se convierten en persistentes
![Page 14: HIBERNATE - jtech.ua.es · Especialista Universitario Java Enterprise Hibernate © 2006-2007 Depto. Ciencia de la Computación e IA Relaciones entre objetos -2 Puntos a tratar](https://reader033.fdocuments.net/reader033/viewer/2022042121/5e9adc659ac1da0e60632a26/html5/thumbnails/14.jpg)
Especialista Universitario Java Enterprise
Hibernate © 2006-2007 Depto. Ciencia de la Computación e IA Relaciones entre objetos -14
Asociación one-to-many (unidireccional)Mapeado Hibernate
<classname="Puja" table="PUJA"> <idname="id"
column="PUJA_ID"> <generator class="native">
</id> </class>
<classname="Articulo" table="ARTICULO">
<id name="id" column="ARTICULO_ID">
<generatorclass="native"/> </id> ... <setname="pujas">
<key column="ARTICULO_ID" not-null="true"/>
<one-to-many class="Puja"/> </set>
</class>
PujaArticulo1..1 0..*
![Page 15: HIBERNATE - jtech.ua.es · Especialista Universitario Java Enterprise Hibernate © 2006-2007 Depto. Ciencia de la Computación e IA Relaciones entre objetos -2 Puntos a tratar](https://reader033.fdocuments.net/reader033/viewer/2022042121/5e9adc659ac1da0e60632a26/html5/thumbnails/15.jpg)
Especialista Universitario Java Enterprise
Hibernate © 2006-2007 Depto. Ciencia de la Computación e IA Relaciones entre objetos -15
Asociación one-to-one (unidireccional)Mapeado Hibernate
<classname="Usuario" table="USUARIO">
<idname="id" column="USER_ID"> ... <many-to-one name="direccionFacturas"
class="Direccion" column="DIRECC_ID" cascade="all" unique="true"/>
</class>
<classname="Direccion" table="DIRECCION">
<idname="id" column="DIRECC_ID"> <generatorclass="native"/>
</id> <propertyname="calle"/> <propertyname="ciudad"/> <propertyname="codPostal"/>
</class>
![Page 16: HIBERNATE - jtech.ua.es · Especialista Universitario Java Enterprise Hibernate © 2006-2007 Depto. Ciencia de la Computación e IA Relaciones entre objetos -2 Puntos a tratar](https://reader033.fdocuments.net/reader033/viewer/2022042121/5e9adc659ac1da0e60632a26/html5/thumbnails/16.jpg)
Especialista Universitario Java Enterprise
Hibernate © 2006-2007 Depto. Ciencia de la Computación e IA Relaciones entre objetos -16
Asociación one-to-one (bidireccional)Mapeado Hibernate
<classname="Usuario" table="USUARIO">
<idname="id" column="USER_ID"> ... <many-to-one name="direccionFacturas"
class="Direccion" column="DIRECC_ID" cascade="all" unique="true"/>
</class>
<classname="Direccion" table="DIRECCION">
<idname="id" column="DIRECC_ID">
<generator class="native"> </id> <one-to-one name="usuario"
class="Usuario" property-ref="direccionFacturas"/>
...</class>
![Page 17: HIBERNATE - jtech.ua.es · Especialista Universitario Java Enterprise Hibernate © 2006-2007 Depto. Ciencia de la Computación e IA Relaciones entre objetos -2 Puntos a tratar](https://reader033.fdocuments.net/reader033/viewer/2022042121/5e9adc659ac1da0e60632a26/html5/thumbnails/17.jpg)
Especialista Universitario Java Enterprise
Hibernate © 2006-2007 Depto. Ciencia de la Computación e IA Relaciones entre objetos -17
Asociación many-to-many (unidireccional)
<classname="Elemento"> <idname="id"
column="ELEMENTO_ID"> <generatorclass="native"/> </id>
</class>
<classname="Categoria"> <idname="id"
column="CATEGORIA_ID"> <generator class="native"/>
</id> <setname="elementos"
table="CategElement"> <key column="CATEGORIA_ID"/> <many-to-many
column="ELEMENTO_ID" class="Elemento"/>
</set> </class>
Mapeado Hibernate
![Page 18: HIBERNATE - jtech.ua.es · Especialista Universitario Java Enterprise Hibernate © 2006-2007 Depto. Ciencia de la Computación e IA Relaciones entre objetos -2 Puntos a tratar](https://reader033.fdocuments.net/reader033/viewer/2022042121/5e9adc659ac1da0e60632a26/html5/thumbnails/18.jpg)
Especialista Universitario Java Enterprise
Hibernate © 2006-2007 Depto. Ciencia de la Computación e IA Relaciones entre objetos -18
Asociación many-to-many (bidireccional)
<classname="Elemento"> <idname="id"
column="ELEMENTO_ID"> <generatorclass="native"/> </id> <setname="categorias"
inverse="true" table="CategElement">
<key column="ELEMENTO_ID"/> <many-to-many
column="CATEGORIA_ID" class="Categoria"/>
</set> </class>
<classname="Categoria"> <id name="id"
column="CATEGORIA_ID"> <generator class="native"/> </id> <set name="elementos"
table="CategElement"> <key column="CATEGORIA_ID"/> <many-to-many
column="ELEMENTO_ID" class="Elemento"/>
</set> </class>
Mapeado Hibernate
cat.getElementos().add(elem); elem.getCategorias().add(cat);
![Page 19: HIBERNATE - jtech.ua.es · Especialista Universitario Java Enterprise Hibernate © 2006-2007 Depto. Ciencia de la Computación e IA Relaciones entre objetos -2 Puntos a tratar](https://reader033.fdocuments.net/reader033/viewer/2022042121/5e9adc659ac1da0e60632a26/html5/thumbnails/19.jpg)
Hibernate © 2006-2007 Depto. Ciencia de la Computación e IA Relaciones entre objetos
Especialista Universitario Java Enterprise
¿Preguntas...?