Hibernate

10
1 Departamento de Departamento de Lenguajes y Sistemas Inform Lenguajes y Sistemas Informáticos ticos escuela técnica superior de ingeniería informática Versión original: Autor (mes 200?) Última revisión: Autor (mes 200?); descripción cambios. Tiempo: ?h [Ángel US V7] Diseño: Amador Durán Toro (2003-2006) Hibernate Hibernate Grupo de Ingenier Grupo de Ingenierí a del Software a del Software Febrero 2007 Febrero 2007 Sevilla, abril de 2007 Grupo de Ingeniería del Software Hibernate Hibernate Escuela Técnica Superior de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos 1. Introducci 1. Introducción 2. 2. POJOs POJOs 3.Mapeo de clases 3.Mapeo de clases 4. Primitivas de 4. Primitivas de Hibernate Hibernate 5. Patr 5. Patrón DAO n DAO 6. Alternativa 6. Alternativa 7. Bibliograf 7. Bibliografía [Ángel US V7] Diseño: Amador Durán Toro (2003-2006) Capa de Persistencia ( Capa de Persistencia (Hibernate Hibernate) Trabaja con POJO’s – Framework ligero Æ Adiós servidor de aplicaciones No es una especificación pero es el más usado ORM (Object/Relation Mapping) Mapeo en ficheros independientes(.hbm.xml) – Hibernate.cfg.xml Clases java para trabajar con BD’s ¿Herramienta para generar esto automáticamente? – HibernateTools

Transcript of Hibernate

Page 1: Hibernate

1

Departamento deDepartamento deLenguajes y Sistemas InformLenguajes y Sistemas Informááticosticos

escuela técnica superiorde ingeniería informática

Vers

ión o

rigin

al:

Auto

r (m

es

200?)

Últim

a r

evis

ión:

Auto

r (m

es

200?)

; desc

ripci

ón c

am

bio

s.

Tie

mpo:

?h

[Ángel US V7] Diseño: Amador Durán Toro (2003-2006)

HibernateHibernate

Grupo de IngenierGrupo de Ingenieríía del Softwarea del Software

Febrero 2007Febrero 2007

Sevilla, abril de 2007Grupo de Ingeniería del Software

HibernateHibernate

Escuela Técnica Superiorde Ingeniería Informática

Departamento de Lenguajesy Sistemas Informáticos

1. Introducci1. Introduccióónn

2. 2. POJOsPOJOs

3.Mapeo de clases3.Mapeo de clases

4. Primitivas de 4. Primitivas de HibernateHibernate

5. Patr5. Patróón DAOn DAO

6. Alternativa6. Alternativa

7. Bibliograf7. Bibliografííaa

[Ángel

US V

7]

Dis

eño:

Am

ador

Durá

n T

oro

(2003-2

006)

•• Capa de Persistencia (Capa de Persistencia (HibernateHibernate))

– Trabaja con POJO’s

– Framework ligero Adiós servidor de aplicaciones

– No es una especificación pero es el más usado

– ORM (Object/Relation Mapping)

– Mapeo en ficheros independientes(.hbm.xml)

– Hibernate.cfg.xml

– Clases java para trabajar con BD’s

– ¿Herramienta para generar esto automáticamente?

– HibernateTools

Page 2: Hibernate

2

Sevilla, abril de 2007Grupo de Ingeniería del Software

HibernateHibernate

Escuela Técnica Superiorde Ingeniería Informática

Departamento de Lenguajesy Sistemas Informáticos

1. Introducci1. Introduccióónn

2. 2. POJOsPOJOs

3.Mapeo de clases3.Mapeo de clases

4. Primitivas de 4. Primitivas de HibernateHibernate

5. Patr5. Patróón DAOn DAO

6. Alternativa6. Alternativa

7. Bibliograf7. Bibliografííaa

[Ángel

US V

7]

Dis

eño:

Am

ador

Durá

n T

oro

(2003-2

006)

•• POJOPOJO’’ss

–– Representan el Modelo del dominioRepresentan el Modelo del dominio

–– Muchas veces, tambiMuchas veces, tambiéén los datos a almacenarn los datos a almacenar

–– ImplementaciImplementacióónn

•• Constructor sin parConstructor sin paráámetrosmetros

•• Atributos privados con sus Atributos privados con sus getget//setset

•• Relaciones como referencias y Relaciones como referencias y CollectionsCollections (1 y * (1 y * respectivamente)respectivamente)

•• Enumeraciones y componentes como referenciasEnumeraciones y componentes como referencias

•• MMéétodos de negocio (los dejaremos fuera)todos de negocio (los dejaremos fuera)

•• SerializableSerializable, , HashCodeHashCode y y EqualsEquals

Sevilla, abril de 2007Grupo de Ingeniería del Software

HibernateHibernate

Escuela Técnica Superiorde Ingeniería Informática

Departamento de Lenguajesy Sistemas Informáticos

1. Introducci1. Introduccióónn

2. 2. POJOsPOJOs

3.Mapeo de clases3.Mapeo de clases

4. Primitivas de 4. Primitivas de HibernateHibernate

5. Patr5. Patróón DAOn DAO

6. Alternativa6. Alternativa

7. Bibliograf7. Bibliografííaa

[Ángel

US V

7]

Dis

eño:

Am

ador

Durá

n T

oro

(2003-2

006)

•• EjemploEjemplo

Page 3: Hibernate

3

Sevilla, abril de 2007Grupo de Ingeniería del Software

HibernateHibernate

Escuela Técnica Superiorde Ingeniería Informática

Departamento de Lenguajesy Sistemas Informáticos

1. Introducci1. Introduccióónn

2. 2. POJOsPOJOs

3.Mapeo de clases3.Mapeo de clases

4. Primitivas de 4. Primitivas de HibernateHibernate

5. Patr5. Patróón DAOn DAO

6. Alternativa6. Alternativa

7. Bibliograf7. Bibliografííaa

[Ángel

US V

7]

Dis

eño:

Am

ador

Durá

n T

oro

(2003-2

006)

public class Persona implements Serializable{private Long id;private String nombre;private int edad;private Direccion direccionTrabajo;private Direccion direccionCasa;

private Collection<Vehiculo> vehiculos = new HashSet<Vehiculo>();public Long getId(){ return this.id; }public void setId(Long id){ this.id = id; }public int getEdad(){ return this.edad; }public void setEdad(int edad){ this.edad = edad; }public String getNombre(){ return this.nombre; }public void setNombre(String nom){ this.nombre = nom; }public Direccion getDireccionTrabajo() { return this.direccionTrabajo; }public void setDireccionTrabajo (Direccion d) { this.direccionTrabajo = d; }public Direccion getDireccionCasa() { return this.direccionCasa; }public void setDireccionCasa (Direccion d) { this.direccionCasa = d; }public Collection<Vehiculo> getVehiculos() {return this.vehiculos;}public void setVehiculos(Collection<Vehiculo> vehiculos){

this.vehiculos = vehiculos;}public void addVehiculo(Vehiculo vehiculo) {

this.vehiculos.add(vehiculo);/*vehiculo.setPersona(this);*/

}public boolean equals(Object object){…}public int hashCode(){…}

}

publicpublic classclass Persona Persona implementsimplements SerializableSerializable{{privateprivate Long Long idid;;privateprivate StringString nombre;nombre;privateprivate intint edad;edad;privateprivate DireccionDireccion direccionTrabajodireccionTrabajo;;privateprivate DireccionDireccion direccionCasadireccionCasa;;

privateprivate Collection<VehiculoCollection<Vehiculo> > vehiculosvehiculos = = newnew HashSet<VehiculoHashSet<Vehiculo>();>();publicpublic Long Long getIdgetId(){ (){ returnreturn this.idthis.id; }; }publicpublic voidvoid setId(LongsetId(Long idid){ ){ this.idthis.id = = idid; }; }publicpublic intint getEdadgetEdad(){ (){ returnreturn this.edadthis.edad; }; }publicpublic voidvoid setEdad(intsetEdad(int edad){ edad){ this.edadthis.edad = edad; }= edad; }publicpublic StringString getNombregetNombre(){ (){ returnreturn this.nombrethis.nombre; }; }publicpublic voidvoid setNombre(StringsetNombre(String nomnom){ ){ this.nombrethis.nombre = = nomnom; }; }publicpublic DireccionDireccion getDireccionTrabajogetDireccionTrabajo() { () { returnreturn this.direccionTrabajothis.direccionTrabajo; }; }publicpublic voidvoid setDireccionTrabajosetDireccionTrabajo ((DireccionDireccion d) { d) { this.direccionTrabajothis.direccionTrabajo = d; }= d; }publicpublic DireccionDireccion getDireccionCasagetDireccionCasa() { () { returnreturn this.direccionCasathis.direccionCasa; }; }publicpublic voidvoid setDireccionCasasetDireccionCasa ((DireccionDireccion d) { d) { this.direccionCasathis.direccionCasa = d; }= d; }publicpublic Collection<VehiculoCollection<Vehiculo> > getVehiculosgetVehiculos() {() {returnreturn this.vehiculosthis.vehiculos;};}publicpublic voidvoid setVehiculos(Collection<VehiculosetVehiculos(Collection<Vehiculo> > vehiculosvehiculos){){

this.vehiculosthis.vehiculos = = vehiculosvehiculos;;}}publicpublic voidvoid addVehiculo(VehiculoaddVehiculo(Vehiculo vehiculo) {vehiculo) {

this.vehiculos.add(vehiculothis.vehiculos.add(vehiculo););/*/*vehiculo.setPersona(thisvehiculo.setPersona(this);*/);*/

}}publicpublic booleanboolean equals(Objectequals(Object objectobject){){……}}publicpublic intint hashCodehashCode(){(){……}}

}}

Sevilla, abril de 2007Grupo de Ingeniería del Software

HibernateHibernate

Escuela Técnica Superiorde Ingeniería Informática

Departamento de Lenguajesy Sistemas Informáticos

1. Introducci1. Introduccióónn

2. 2. POJOsPOJOs

3.Mapeo de clases3.Mapeo de clases

4. Primitivas de 4. Primitivas de HibernateHibernate

5. Patr5. Patróón DAOn DAO

6. Alternativa6. Alternativa

7. Bibliograf7. Bibliografííaa

[Ángel

US V

7]

Dis

eño:

Am

ador

Durá

n T

oro

(2003-2

006)

•• Mapeo de clasesMapeo de clases

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.garage.Persona" table="PERSONA" …>

<id name="id" type="java.lang.Long" unsaved-value="null"><column name="ID" sql-type="BIGINT"/><generator class="native"></generator>

</id><property name="nombre" type="java.lang.String">

<column name="NOMBRE" not-null="true" unique="false" sql-type="VARCHAR(255)"/>

</property><property name="edad" type="int“>

<column name="EDAD" not-null="true" unique="false" sql-type="INTEGER"/>

</property></class>

</hibernate-mapping>

<?xml version="1.0" encoding="UTF<?xml version="1.0" encoding="UTF--8"?>8"?><!DOCTYPE hibernate<!DOCTYPE hibernate--mapping PUBLIC "mapping PUBLIC "--//Hibernate/Hibernate //Hibernate/Hibernate Mapping DTD 3.0//EN"Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate"http://hibernate.sourceforge.net/hibernate--mappingmapping--3.0.dtd">3.0.dtd"><hibernate<hibernate--mapping>mapping><class name="<class name="com.garage.Personacom.garage.Persona" table="PERSONA" " table="PERSONA" ……>>

<id name="id" type="<id name="id" type="java.lang.Longjava.lang.Long" unsaved" unsaved--value="null">value="null"><column name="ID" <column name="ID" sqlsql--type="BIGINT"/>type="BIGINT"/><generator class="native"><generator class="native"></generator></generator>

</id></id><property name="<property name="nombrenombre" type="" type="java.lang.Stringjava.lang.String">">

<column name="NOMBRE" not<column name="NOMBRE" not--null="true" unique="false" null="true" unique="false" sqlsql--type="VARCHAR(255)"/>type="VARCHAR(255)"/>

</property></property><property name="<property name="edadedad" type="" type="intint““>>

<column name="EDAD" not<column name="EDAD" not--null="true" unique="false" null="true" unique="false" sqlsql--type="INTEGER"/>type="INTEGER"/>

</property></property></</classclass>>

</</hibernatehibernate--mappingmapping>>

Page 4: Hibernate

4

Sevilla, abril de 2007Grupo de Ingeniería del Software

HibernateHibernate

Escuela Técnica Superiorde Ingeniería Informática

Departamento de Lenguajesy Sistemas Informáticos

1. Introducci1. Introduccióónn

2. 2. POJOsPOJOs

3.Mapeo de clases3.Mapeo de clases

4. Primitivas de 4. Primitivas de HibernateHibernate

5. Patr5. Patróón DAOn DAO

6. Alternativa6. Alternativa

7. Bibliograf7. Bibliografííaa

[Ángel

US V

7]

Dis

eño:

Am

ador

Durá

n T

oro

(2003-2

006)

•• Mapeo de RelacionesMapeo de Relaciones

– En el fichero Persona.hbm.xml :

– En Vehiculo.hbm.xml :

<set name="vehiculos" order-by="PERSONA_FK“><key foreign-key="VEHICULO_PERSONA_FKC">

<column name="PERSONA_FK" sql-type="BIGINT"/></key><one-to-many class="com.garage.Vehiculo"/>

</set>

<set name="<set name="vehiculosvehiculos" order" order--by="PERSONA_FKby="PERSONA_FK““>><key foreign<key foreign--key="VEHICULO_PERSONA_FKC">key="VEHICULO_PERSONA_FKC">

<column name="PERSONA_FK" <column name="PERSONA_FK" sqlsql--type="BIGINT"/>type="BIGINT"/></key></key><one<one--toto--many class="many class="com.garage.Vehiculocom.garage.Vehiculo"/>"/>

</</setset>>

<many-to-one name="persona“class="com.garage.Persona" foreign-key="VEHICULO_PERSONA_FKC"><column name="PERSONA_FK" not-null="true" sql-type="BIGINT"/></many-to-one>

<many<many--toto--one name="personaone name="persona““class="class="com.garage.Personacom.garage.Persona" " foreignforeign--key="VEHICULO_PERSONA_FKC">key="VEHICULO_PERSONA_FKC"><column name="PERSONA_FK" not<column name="PERSONA_FK" not--null="true" null="true" sqlsql--type="BIGINT"/>type="BIGINT"/></</manymany--toto--oneone>>

Sevilla, abril de 2007Grupo de Ingeniería del Software

HibernateHibernate

Escuela Técnica Superiorde Ingeniería Informática

Departamento de Lenguajesy Sistemas Informáticos

1. Introducci1. Introduccióónn

2. 2. POJOsPOJOs

3.Mapeo de clases3.Mapeo de clases

4. Primitivas de 4. Primitivas de HibernateHibernate

5. Patr5. Patróón DAOn DAO

6. Alternativa6. Alternativa

7. Bibliograf7. Bibliografííaa

[Ángel

US V

7]

Dis

eño:

Am

ador

Durá

n T

oro

(2003-2

006)

•• Mapeo de ComponentesMapeo de Componentes

<component name="direccionCasa" class=" com.garage. Direccion">

<property name="calle" type="java.lang.String"><column name="DIRECCION_CASA_CALLE" not-

null="true" unique="false" sql-type="VARCHAR(255)"/></property><property name="ciudad" type="java.lang.String">

<column name="DIRECCION_CASA_CIUDAD" not-null="true" unique="false" sql-type="VARCHAR(255)"/>

</property><property name="codpost" type="java.lang.String">

<column name="DIRECCION_CASA_CODPOST" not-null="true" unique="false" sql-type="VARCHAR(255)"/>

</property></component>

<component name="<component name="direccionCasadireccionCasa" class=" " class=" com.garagecom.garage. . DireccionDireccion">">

<property name="<property name="callecalle" type="" type="java.lang.Stringjava.lang.String">"><column name="DIRECCION_CASA_CALLE" not<column name="DIRECCION_CASA_CALLE" not--

null="true" unique="false" null="true" unique="false" sqlsql--type="VARCHAR(255)"/>type="VARCHAR(255)"/></property></property><property name="ciudad" type="<property name="ciudad" type="java.lang.Stringjava.lang.String">">

<column name="DIRECCION_CASA_CIUDAD" not<column name="DIRECCION_CASA_CIUDAD" not--null="true" unique="false" null="true" unique="false" sqlsql--type="VARCHAR(255)"/>type="VARCHAR(255)"/>

</property></property><property name="<property name="codpostcodpost" type="" type="java.lang.Stringjava.lang.String">">

<column name="DIRECCION_CASA_CODPOST" not<column name="DIRECCION_CASA_CODPOST" not--null="true" unique="false" null="true" unique="false" sqlsql--type="VARCHAR(255)"/>type="VARCHAR(255)"/>

</property></property></component></component>

Page 5: Hibernate

5

Sevilla, abril de 2007Grupo de Ingeniería del Software

HibernateHibernate

Escuela Técnica Superiorde Ingeniería Informática

Departamento de Lenguajesy Sistemas Informáticos

1. Introducci1. Introduccióónn

2. 2. POJOsPOJOs

3.Mapeo de clases3.Mapeo de clases

4. Primitivas de 4. Primitivas de HibernateHibernate

5. Patr5. Patróón DAOn DAO

6. Alternativa6. Alternativa

7. Bibliograf7. Bibliografííaa

[Ángel

US V

7]

Dis

eño:

Am

ador

Durá

n T

oro

(2003-2

006)

•• Mapeo de Herencia (Una tabla por clase concreta)Mapeo de Herencia (Una tabla por clase concreta)

<class name="com.garage.Moto" table="MOTO" dynamic-insert="false" dynamic-update="false">

<id name="id" type="java.lang.Long" unsaved-value="null"><column name="ID" sql-type="BIGINT"/><generator class="native"></generator>

</id><property name=“modelo" type="int">

<column name=“MODELO" not-null="true" unique="false" sql-type="INTEGER"/>

</property><many-to-one name="persona" class="com.garage.Persona"

foreign-key="VEHICULO_PERSONA_FKC" ><column name="PERSONA_FK" not-null="true" sql-

type="BIGINT"/></many-to-one><property name=“permiteSidecar" type=“boolean">

<column name=“PERMITE_SIDECAR" not-null="true" unique="false" sql-type="VARCHAR(255)"/>

</property></class>

<class name="<class name="com.garage.Motocom.garage.Moto" table="MOTO" dynamic" table="MOTO" dynamic--insert="false" dynamicinsert="false" dynamic--update="false">update="false">

<id name="id" type="<id name="id" type="java.lang.Longjava.lang.Long" unsaved" unsaved--value="null">value="null"><column name="ID" <column name="ID" sqlsql--type="BIGINT"/>type="BIGINT"/><generator class="native"><generator class="native"></generator></generator>

</id></id><property name=<property name=““modelomodelo" type="" type="intint">">

<column name=<column name=““MODELO" notMODELO" not--null="true" unique="false" null="true" unique="false" sqlsql--type="INTEGER"/>type="INTEGER"/>

</property></property><many<many--toto--one name="persona" class="one name="persona" class="com.garage.Personacom.garage.Persona" "

foreignforeign--key="VEHICULO_PERSONA_FKC" >key="VEHICULO_PERSONA_FKC" ><column name="PERSONA_FK" not<column name="PERSONA_FK" not--null="true" null="true" sqlsql--

type="BIGINT"/>type="BIGINT"/></many</many--toto--one>one><property name=<property name=““permiteSidecarpermiteSidecar" type=" type=““booleanboolean">">

<column name=<column name=““PERMITE_SIDECAR" notPERMITE_SIDECAR" not--null="true" null="true" unique="false" unique="false" sqlsql--type="VARCHAR(255)"/>type="VARCHAR(255)"/>

</</propertyproperty>></</classclass>>

Sevilla, abril de 2007Grupo de Ingeniería del Software

HibernateHibernate

Escuela Técnica Superiorde Ingeniería Informática

Departamento de Lenguajesy Sistemas Informáticos

1. Introducci1. Introduccióónn

2. 2. POJOsPOJOs

3.Mapeo de clases3.Mapeo de clases

4. Primitivas de 4. Primitivas de HibernateHibernate

5. Patr5. Patróón DAOn DAO

6. Alternativa6. Alternativa

7. Bibliograf7. Bibliografííaa

[Ángel

US V

7]

Dis

eño:

Am

ador

Durá

n T

oro

(2003-2

006)

•• Mapeo de Herencia (Una tabla por jerarquMapeo de Herencia (Una tabla por jerarquíía de a de clases)clases)

<class name="com.garage.Vehiculo" table="VEHICULO" ><id name="id" type="java.lang.Long" unsaved-value="null">

<column name="ID" sql-type="BIGINT"/><generator class="native"></generator>

</id><discriminator column="class" type="string"/><property name=“modelo" type="int">

<column name=“MODELO" not-null="true" unique="false" sql-type="INTEGER"/>

</property>…<subclass name="com.garage.Moto" discriminator-

value="Moto" abstract="false"><property name=“permiteSidecar" type=“boolean">

<column name=“PERMITE_SIDECAR" not-null="true" unique="false" sql-type="VARCHAR(255)"/>

</property></subclass>

</class>

<class name="<class name="com.garage.Vehiculocom.garage.Vehiculo" table="VEHICULO" >" table="VEHICULO" ><id name="id" type="<id name="id" type="java.lang.Longjava.lang.Long" unsaved" unsaved--value="null">value="null">

<column name="ID" <column name="ID" sqlsql--type="BIGINT"/>type="BIGINT"/><generator class="native"><generator class="native"></generator></generator>

</id></id><discriminator column="class" type="string"/><discriminator column="class" type="string"/><property name=<property name=““modelomodelo" type="" type="intint">">

<column name=<column name=““MODELO" notMODELO" not--null="true" unique="false" null="true" unique="false" sqlsql--type="INTEGER"/>type="INTEGER"/>

</property></property>……<subclass name="<subclass name="com.garage.Motocom.garage.Moto" discriminator" discriminator--

value="value="MotoMoto" abstract="false">" abstract="false"><property name=<property name=““permiteSidecarpermiteSidecar" type=" type=““booleanboolean">">

<column name=<column name=““PERMITE_SIDECAR" notPERMITE_SIDECAR" not--null="true" null="true" unique="false" unique="false" sqlsql--type="VARCHAR(255)"/>type="VARCHAR(255)"/>

</property></property></subclass></subclass>

</</classclass>>

Page 6: Hibernate

6

Sevilla, abril de 2007Grupo de Ingeniería del Software

HibernateHibernate

Escuela Técnica Superiorde Ingeniería Informática

Departamento de Lenguajesy Sistemas Informáticos

1. Introducci1. Introduccióónn

2. 2. POJOsPOJOs

3.Mapeo de clases3.Mapeo de clases

4. Primitivas de 4. Primitivas de HibernateHibernate

5. Patr5. Patróón DAOn DAO

6. Alternativa6. Alternativa

7. Bibliograf7. Bibliografííaa

[Ángel

US V

7]

Dis

eño:

Am

ador

Durá

n T

oro

(2003-2

006)

•• Mapeo de Herencia (Una tabla por subclase)Mapeo de Herencia (Una tabla por subclase)

<class name="Vehiculo" table="VEHICULO"><id name="id" type="java.lang.Long" unsaved-value="null">

<column name="ID" sql-type="BIGINT"/><generator class="native"></generator>

</id><property name=“modelo" type="int">…</property>

...<joined-subclass name="com.garage.Moto" table="MOTO"

abstract="false"><key foreign-key="MOTOIFKC">

<column name="ID" sql-type="BIGINT"/></key><property name=“permiteSidecar" type=“boolean">

<column name=“PERMITE_SIDECAR" not-null="true" unique="false" sql-type="VARCHAR(255)"/>

</property></joined-subclass>

...</class>

</hibernate-mapping>

<class name="<class name="VehiculoVehiculo" table="VEHICULO">" table="VEHICULO"><id name="id" type="<id name="id" type="java.lang.Longjava.lang.Long" unsaved" unsaved--value="null">value="null">

<column name="ID" <column name="ID" sqlsql--type="BIGINT"/>type="BIGINT"/><generator class="native"><generator class="native"></generator></generator>

</id></id><property name=<property name=““modelomodelo" type="" type="intint">">……</property></property>

......<joined<joined--subclass name="subclass name="com.garage.Motocom.garage.Moto" table="MOTO" " table="MOTO"

abstract="false">abstract="false"><key foreign<key foreign--key="MOTOIFKC">key="MOTOIFKC">

<column name="ID" <column name="ID" sqlsql--type="BIGINT"/>type="BIGINT"/></key></key><property name=<property name=““permiteSidecarpermiteSidecar" type=" type=““booleanboolean">">

<column name=<column name=““PERMITE_SIDECAR" notPERMITE_SIDECAR" not--null="true" null="true" unique="false" unique="false" sqlsql--type="VARCHAR(255)"/>type="VARCHAR(255)"/>

</property></property></joined</joined--subclass>subclass>

......</class></class>

</hibernate</hibernate--mapping>mapping>

Sevilla, abril de 2007Grupo de Ingeniería del Software

HibernateHibernate

Escuela Técnica Superiorde Ingeniería Informática

Departamento de Lenguajesy Sistemas Informáticos

1. Introducci1. Introduccióónn

2. 2. POJOsPOJOs

3.Mapeo de clases3.Mapeo de clases

4. Primitivas de 4. Primitivas de HibernateHibernate

5. Patr5. Patróón DAOn DAO

6. Alternativa6. Alternativa

7. Bibliograf7. Bibliografííaa

[Ángel

US V

7]

Dis

eño:

Am

ador

Durá

n T

oro

(2003-2

006)

•• Hibernate.cfg.xmlHibernate.cfg.xml<?xml version="1.0" …><hibernate-configuration>

<session-factory><!-- properties --><property name="connection.driver_class">

com.mysql.jdbc.Driver</property><property name="connection.username">root</property><property name="connection.password">admin</property><property name="connection.url">

jdbc:mysql://localhost/basededatos</property><property name="show_sql">true</property><property name="dialect">

org.hibernate.dialect.MySQLDialect</property><!-- mapping files --><mapping resource="com/garage/Persona.hbm.xml"/><mapping resource="com/garage/Vehiculo.hbm.xml"/>

</session-factory></hibernate-configuration>

<?xml version="1.0" <?xml version="1.0" ……>><hibernate<hibernate--configuration>configuration>

<session<session--factory>factory><!<!---- properties properties ---->><property name="<property name="connection.driver_classconnection.driver_class">">

com.mysql.jdbc.Drivercom.mysql.jdbc.Driver</property></property><property name="<property name="connection.usernameconnection.username">root</property>">root</property><property name="<property name="connection.passwordconnection.password">admin</property>">admin</property><property name="<property name="connection.urlconnection.url">">

jdbc:mysql://localhost/basededatosjdbc:mysql://localhost/basededatos</property></property><property name="<property name="show_sqlshow_sql">true</property>">true</property><property name="dialect"><property name="dialect">

org.hibernate.dialect.MySQLDialectorg.hibernate.dialect.MySQLDialect</property></property><!<!---- mapping files mapping files ---->><mapping resource="com/garage/<mapping resource="com/garage/Persona.hbm.xmlPersona.hbm.xml"/>"/><mapping resource="com/garage/<mapping resource="com/garage/Vehiculo.hbm.xmlVehiculo.hbm.xml"/>"/>

</</sessionsession--factoryfactory>></</hibernatehibernate--configurationconfiguration>>

Page 7: Hibernate

7

Sevilla, abril de 2007Grupo de Ingeniería del Software

HibernateHibernate

Escuela Técnica Superiorde Ingeniería Informática

Departamento de Lenguajesy Sistemas Informáticos

1. Introducci1. Introduccióónn

2. 2. POJOsPOJOs

3.Mapeo de clases3.Mapeo de clases

4. Primitivas de 4. Primitivas de HibernateHibernate

5. Patr5. Patróón DAOn DAO

6. Alternativa6. Alternativa

7. Bibliograf7. Bibliografííaa

[Ángel

US V

7]

Dis

eño:

Am

ador

Durá

n T

oro

(2003-2

006)

• Manejo de Sesiones y transacciones

• HibernateException

• Funciones de hibernate (Create, Delete y Update)

SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();Session ses = sessionFactory.openSession();Transaction tx = ses.beginTransaction();tx.commit();tx.rollback();ses.close();

SessionFactorySessionFactory sessionFactorysessionFactory = new = new Configuration().configure().buildSessionFactoryConfiguration().configure().buildSessionFactory();();SessionSession sesses = = sessionFactory.openSessionsessionFactory.openSession();();TransactionTransaction txtx = = ses.beginTransactionses.beginTransaction();();tx.committx.commit();();tx.rollbacktx.rollback();();ses.closeses.close();();

Persona p = new Persona();session.Load(p,pkId); // o Get()Session.save(p);Session.saveOrUpdate(p);session.Delete(p);p.setNombre(“Juan”);session.update(p);

Persona p = new Persona();Persona p = new Persona();session.Load(p,pkIdsession.Load(p,pkId); // o Get()); // o Get()Session.save(pSession.save(p););Session.saveOrUpdate(pSession.saveOrUpdate(p););session.Delete(psession.Delete(p););p.setNombrep.setNombre((““JuanJuan””););session.update(psession.update(p););

Sevilla, abril de 2007Grupo de Ingeniería del Software

HibernateHibernate

Escuela Técnica Superiorde Ingeniería Informática

Departamento de Lenguajesy Sistemas Informáticos

1. Introducci1. Introduccióónn

2. 2. POJOsPOJOs

3.Mapeo de clases3.Mapeo de clases

4. Primitivas de 4. Primitivas de HibernateHibernate

5. Patr5. Patróón DAOn DAO

6. Alternativa6. Alternativa

7. Bibliograf7. Bibliografííaa

[Ángel

US V

7]

Dis

eño:

Am

ador

Durá

n T

oro

(2003-2

006)

•• Funciones de Funciones de HibernateHibernate ((ReadRead))

List personas = session.createCriteria(Persona.class).Add(Restrictions.like("nombre", "Ramon%") ) // el nombre debe ser Ramon y lo que siga.Add(Restrictions.between("edad", minAge, maxAge) ) //la edad está entre min y max.Add(Restrictions.or( //o la edad es cero o null

Restrictions.eq( "edad", new Integer(0) ),Restrictions.isNull("edad")

)).Add(Restrictions.in( "nombre", new String[] { "Ramon",

"Paco", "Fran" } ) )// el nombre solo puede ser Ramón, Paco o Fran.Add(Restrictions.disjunction().Add(Restrictions.isNull("edad") ).Add(Restrictions.eq("edad", new Integer(0) ) ).Add(Restrictions.eq("edad", new Integer(1) ) ).Add(Restrictions.eq("edad", new Integer(2) ) )// la edad solo puede ser null, 0, 1 o 2)).list();

ListList personas = personas = session.createCriteria(Persona.classsession.createCriteria(Persona.class))..Add(Restrictions.likeAdd(Restrictions.like("nombre", "("nombre", "Ramon%Ramon%") ) ") ) // el nombre debe ser Ramon y lo que siga// el nombre debe ser Ramon y lo que siga..Add(Restrictions.betweenAdd(Restrictions.between("edad", ("edad", minAgeminAge, , maxAgemaxAge) ) ) ) //la edad est//la edad estáá entre entre minmin y y maxmax..Add(Restrictions.orAdd(Restrictions.or(( //o la edad es cero o //o la edad es cero o nullnull

Restrictions.eqRestrictions.eq( "edad", ( "edad", newnew IntegerInteger(0) ),(0) ),Restrictions.isNullRestrictions.isNull("edad")("edad")

))))..Add(Restrictions.inAdd(Restrictions.in( "nombre", ( "nombre", newnew StringString[] { "Ramon", [] { "Ramon",

"Paco", "Fran" } ) )"Paco", "Fran" } ) )// el nombre solo puede ser Ram// el nombre solo puede ser Ramóón, Paco o Frann, Paco o Fran..Add(Restrictions.disjunctionAdd(Restrictions.disjunction()()..Add(Restrictions.isNullAdd(Restrictions.isNull("edad") )("edad") )..Add(Restrictions.eqAdd(Restrictions.eq("edad", ("edad", newnew IntegerInteger(0) ) )(0) ) )..Add(Restrictions.eqAdd(Restrictions.eq("edad", ("edad", newnew IntegerInteger(1) ) )(1) ) )..Add(Restrictions.eqAdd(Restrictions.eq("edad", ("edad", newnew IntegerInteger(2) ) )(2) ) )// la edad solo puede ser // la edad solo puede ser nullnull, 0, 1 o 2, 0, 1 o 2))))..listlist();();

Page 8: Hibernate

8

Sevilla, abril de 2007Grupo de Ingeniería del Software

HibernateHibernate

Escuela Técnica Superiorde Ingeniería Informática

Departamento de Lenguajesy Sistemas Informáticos

1. Introducci1. Introduccióónn

2. 2. POJOsPOJOs

3.Mapeo de clases3.Mapeo de clases

4. Primitivas de 4. Primitivas de HibernateHibernate

5. Patr5. Patróón DAOn DAO

6. Alternativa6. Alternativa

7. Bibliograf7. Bibliografííaa

[Ángel

US V

7]

Dis

eño:

Am

ador

Durá

n T

oro

(2003-2

006)

•• PatronPatron DAO (java 5)DAO (java 5)

– Recomendado por hibernate

– Extender para cada pojo

public interface GenericDAO<T, ID extends Serializable> {

T findById(ID id, boolean lock);List<T> findAll();List<T> findByExample(T exampleInstance, String…

excludeProps);T makePersistent(T entity);void makeTransient(T entity);

}

public interface public interface GenericDAOGenericDAO<T, ID extends <T, ID extends SerializableSerializable> > {{

T T findById(IDfindById(ID id, id, booleanboolean lock);lock);List<T> List<T> findAllfindAll();();List<T> List<T> findByExample(TfindByExample(T exampleInstanceexampleInstance, String, String……

excludePropsexcludeProps););T T makePersistent(TmakePersistent(T entity);entity);void void makeTransient(TmakeTransient(T entity);entity);

}}

public interface PersonaDAO extends GenericDAO<Persona, Long>{}

public interface public interface PersonaDAOPersonaDAO extends extends GenericDAOGenericDAO<Persona, <Persona, Long>Long>{}{}

Sevilla, abril de 2007Grupo de Ingeniería del Software

HibernateHibernate

Escuela Técnica Superiorde Ingeniería Informática

Departamento de Lenguajesy Sistemas Informáticos

1. Introducci1. Introduccióónn

2. 2. POJOsPOJOs

3.Mapeo de clases3.Mapeo de clases

4. Primitivas de 4. Primitivas de HibernateHibernate

5. Patr5. Patróón DAOn DAO

6. Alternativa6. Alternativa

7. Bibliograf7. Bibliografííaa

[Ángel

US V

7]

Dis

eño:

Am

ador

Durá

n T

oro

(2003-2

006)

•• Forma de trabajoForma de trabajo

Persona p = new Persona();// Atributo Normalp.setNombre("nombre");// ComponentesDireccion d = new Direccion("ciuCas"," calCas"," codCas"); //constructor con parametrosp.setDireccionCasa(d);d = new Direccion("calDirTra"," ciuDirTra"," codDirTra");p.setDireccionTrabajo(d);// Enumeration - constructor desde stringSexo sx = Sexo.fromString(“HOMBRE"); p.setSexo(sx);//GuardoDAOFactory dfact;dfact = DAOFactory.getInstance(); ImplementarPersonaDAO pdao = dfact.getPersonaDAO();HibernateUtils.beginTransaction(); Implementarpdao.makePersistent(p);HibernateUtils.commitTransaction(); Implementar

Persona p = new Persona();Persona p = new Persona();// // AtributoAtributo NormalNormalp.setNombre("nombrep.setNombre("nombre");");// // ComponentesComponentesDireccionDireccion d = new d = new Direccion("ciuCasDireccion("ciuCas"," "," calCascalCas"," "," codCascodCas"); "); //constructor con //constructor con parametrosparametrosp.setDireccionCasa(dp.setDireccionCasa(d););d = new d = new Direccion("calDirTraDireccion("calDirTra"," "," ciuDirTraciuDirTra"," "," codDirTracodDirTra");");p.setDireccionTrabajo(dp.setDireccionTrabajo(d););// Enumeration // Enumeration -- constructor constructor desdedesde stringstringSexoSexo sxsx = = Sexo.fromString(Sexo.fromString(““HOMBREHOMBRE"); "); p.setSexo(sxp.setSexo(sx););////GuardoGuardoDAOFactoryDAOFactory dfactdfact;;dfactdfact = = DAOFactory.getInstanceDAOFactory.getInstance(); (); ImplementarImplementarPersonaDAOPersonaDAO pdaopdao = = dfact.getPersonaDAOdfact.getPersonaDAO();();HibernateUtils.beginTransactionHibernateUtils.beginTransaction(); (); ImplementarImplementarpdao.makePersistent(ppdao.makePersistent(p););HibernateUtils.commitTransactionHibernateUtils.commitTransaction(); (); ImplementarImplementar

Page 9: Hibernate

9

Sevilla, abril de 2007Grupo de Ingeniería del Software

HibernateHibernate

Escuela Técnica Superiorde Ingeniería Informática

Departamento de Lenguajesy Sistemas Informáticos

1. Introducci1. Introduccióónn

2. 2. POJOsPOJOs

3.Mapeo de clases3.Mapeo de clases

4. Primitivas de 4. Primitivas de HibernateHibernate

5. Patr5. Patróón DAOn DAO

6. Alternativa6. Alternativa

7. Bibliograf7. Bibliografííaa

[Ángel

US V

7]

Dis

eño:

Am

ador

Durá

n T

oro

(2003-2

006)

•• La alternativa La alternativa –– JPAJPA

– EJB3 Especificación de SUN

– Intervinieron gente de Hibernate y Oracle

– Trabaja con POJOs

– Xml mapping Anotaciones

– HQL EJB QL

– Session y transaction Por contenedor (no Home)

– Anoaciones opcionales

Sevilla, abril de 2007Grupo de Ingeniería del Software

HibernateHibernate

Escuela Técnica Superiorde Ingeniería Informática

Departamento de Lenguajesy Sistemas Informáticos

1. Introducci1. Introduccióónn

2. 2. POJOsPOJOs

3.Mapeo de clases3.Mapeo de clases

4. Primitivas de 4. Primitivas de HibernateHibernate

5. Patr5. Patróón DAOn DAO

6. Alternativa6. Alternativa

7. Bibliograf7. Bibliografííaa

[Ángel

US V

7]

Dis

eño:

Am

ador

Durá

n T

oro

(2003-2

006)

•• EjemploEjemplo

@Entitypublic class Persona {private Long id;private String nombre;

private Collection<Vehiculo> vehiculos = new HashSet<Vehiculo>();

@Id(generate=AUTO)public Long getId(){ return this.id; }public void setId(Long id){ this.id = id; }

@Column(length=500)public String getNombre(){ return this.nombre; }public void setNombre(String nom){ this.nombre = nom; }

@OneToMany(cascade=ALL)public Collection<Vehiculo> getVehiculos() {return this.vehiculos;}public void setVehiculos(Collection<Vehiculo> vehiculos){

this.vehiculos = vehiculos;}public void addVehiculo(Vehiculo vehiculo) {

this.vehiculos.add(vehiculo);/*vehiculo.setPersona(this);*/

}}

@Entity@Entitypublicpublic classclass Persona {Persona {privateprivate Long Long idid;;privateprivate StringString nombre;nombre;

privateprivate Collection<VehiculoCollection<Vehiculo> > vehiculosvehiculos = = newnew HashSet<VehiculoHashSet<Vehiculo>();>();

@Id(generate@Id(generate=AUTO)=AUTO)publicpublic Long Long getIdgetId(){ (){ returnreturn this.idthis.id; }; }publicpublic voidvoid setId(LongsetId(Long idid){ ){ this.idthis.id = = idid; }; }

@Column(length@Column(length=500)=500)publicpublic StringString getNombregetNombre(){ (){ returnreturn this.nombrethis.nombre; }; }publicpublic voidvoid setNombre(StringsetNombre(String nomnom){ ){ this.nombrethis.nombre = = nomnom; }; }

@OneToMany(cascade@OneToMany(cascade=ALL)=ALL)publicpublic Collection<VehiculoCollection<Vehiculo> > getVehiculosgetVehiculos() {() {returnreturn this.vehiculosthis.vehiculos;};}publicpublic voidvoid setVehiculos(Collection<VehiculosetVehiculos(Collection<Vehiculo> > vehiculosvehiculos){){

this.vehiculosthis.vehiculos = = vehiculosvehiculos;;}}publicpublic voidvoid addVehiculo(VehiculoaddVehiculo(Vehiculo vehiculo) {vehiculo) {

this.vehiculos.add(vehiculothis.vehiculos.add(vehiculo););/*/*vehiculo.setPersona(thisvehiculo.setPersona(this);*/);*/

}}}}

Page 10: Hibernate

10

Sevilla, abril de 2007Grupo de Ingeniería del Software

HibernateHibernate

Escuela Técnica Superiorde Ingeniería Informática

Departamento de Lenguajesy Sistemas Informáticos

1. Introducci1. Introduccióónn

2. 2. POJOsPOJOs

3.Mapeo de clases3.Mapeo de clases

4. Primitivas de 4. Primitivas de HibernateHibernate

5. Patr5. Patróón DAOn DAO

6. Alternativa6. Alternativa

7. Bibliograf7. Bibliografííaa

[Ángel

US V

7]

Dis

eño:

Am

ador

Durá

n T

oro

(2003-2

006)

•• BibliografBibliografííaa

–– HibernateHibernate in in ActionAction

ManningManning

–– POJOsPOJOs in in ActionAction

ManningManning

–– EJB3 in EJB3 in ActionAction

ManningManning