hibernate - jtech.ua.es · especialista universitario java enterprise hibernate © 2006-2007 depto....

19
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

Upload: others

Post on 16-Apr-2020

8 views

Category:

Documents


0 download

TRANSCRIPT

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Hibernate © 2006-2007 Depto. Ciencia de la Computación e IA Relaciones entre objetos

Especialista Universitario Java Enterprise

¿Preguntas...?