Hibernate
Transcript of Hibernate
![Page 1: Hibernate](https://reader036.fdocuments.net/reader036/viewer/2022082603/546f7945b4af9f45358b4585/html5/thumbnails/1.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022082603/546f7945b4af9f45358b4585/html5/thumbnails/2.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022082603/546f7945b4af9f45358b4585/html5/thumbnails/3.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022082603/546f7945b4af9f45358b4585/html5/thumbnails/4.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022082603/546f7945b4af9f45358b4585/html5/thumbnails/5.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022082603/546f7945b4af9f45358b4585/html5/thumbnails/6.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022082603/546f7945b4af9f45358b4585/html5/thumbnails/7.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022082603/546f7945b4af9f45358b4585/html5/thumbnails/8.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022082603/546f7945b4af9f45358b4585/html5/thumbnails/9.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022082603/546f7945b4af9f45358b4585/html5/thumbnails/10.jpg)
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