Está en la página 1de 55

Tutorial de Hibernate

Tutorial de Hibernate
Elabor: Ismael Nuez
Tutorial de Hibernate
ndice de contenido
Introduccin............................................................................................................................................... 4
Herramientas necesarias.............................................................................................................................6
Hibernate............................................................................................................................................... 6
HSQL.....................................................................................................................................................6
Eclipse................................................................................................................................................... 6
erb!..................................................................................................................................................... 6
"plicacin sencilla usando Hibernate........................................................................................................ #
$rear el pro!ecto %a&a con Eclipse........................................................................................................#
$on'i(uracin del )uild *at+................................................................................................................ ,
$reacin de las clases %a&a..................................................................................................................-.
$lase del ob/eto de dominio........................................................................................................... -.
$lase de 0ane/o del ob/eto de dominio......................................................................................... -4
$on'i(uracin de Hibernate................................................................................................................ -1
El arc+i&o +ibernate.c'(.2ml...........................................................................................................-1
El arc+i&o Libro.+bm.2ml...............................................................................................................-,
$reacin del arc+i&o lo(./.properties..............................................................................................3
"utomatizacin del proceso de construccin con "NT...................................................................... .3
$orrer la aplicacin............................................................................................................................. ..
"plicacin sencilla utilizando Hibernate ! erb!................................................................................... .6
$on'i(uracin de el arc+i&o +ibernate.c'(.2ml................................................................................... .#
$orriendo la aplicacin....................................................................................................................... .1
$reando aplicaciones con Hibernate........................................................................................................ 4.
"natom5a de los arc+i&o de mapeo..................................................................................................... 44
Tipos de datos soportados por Hibernate........................................................................................44
"tributos del elemento 6+ibernate7mappin(8................................................................................ 44
"tributos del elemento 6class8...................................................................................................... 44
"tributos del elemento 6id8........................................................................................................... 46
"tributos del elemento 6(enerator8.......................................................................................... 46
"tributos del elemento 6propert!8.................................................................................................4#
9elaciones entre tablas........................................................................................................................ 41
"tributos del elemento 6one7to7one8.............................................................................................4,
"tributos del elemento 6one7to7man!8..........................................................................................43
"tributos del elemento 6man!7to7man!8.......................................................................................4.
"tributos comunes de los elementos de coleccin......................................................................... 4.
"tributos del elemento 6set8..................................................................................................... 44
"tributos del elemento 6list8.....................................................................................................4:
"tributos del elemento 6idba(8.................................................................................................4:
"tributos del elemento 6map8...................................................................................................4:
"tributos del elemento 6ba(8....................................................................................................46
9elaciones bidireccionales.................................................................................................................. 46
9elaciones del tipo 6one7to7man!8................................................................................................46
9elaciones del tipo 6man!7to7man!8.............................................................................................4#
0apeo de clases ! sus relaciones........................................................................................................ 4,
Elabor: Ismael Nuez
Tutorial de Hibernate
0apeo de la relacin de composicin............................................................................................ 4,
0apeo de la relacin de +erencia................................................................................................... :3
9e'erencias...............................................................................................................................................::
En in(les.............................................................................................................................................. ::
En espaol........................................................................................................................................... ::
Elabor: Ismael Nuez
Tutorial de Hibernate
Introduccin
"l traba/ar con pro(ramacin orientada a ob/etos en muc+as ocasiones nos encontramos con el
problema de +acer persistir los ob/etos en una base de datos relacional; esto nos in&olucra en el
problema de <ue el mundo relacional ! el orientado a ob/etos no son del todo compatibles.
*ara e&idenciar este problema ima(inemos <ue tenemos <ue +acer persistir un solo ob/eto en una tabla
relacional; esto e&identemente in&olucra la creacin de un "= >ata "ccess =b/ect? <ue nos permita
+acer persistir a este ob/eto. Este "= debe tener la implementacin de cdi(o SQL para tener acceso
a la base de datos en la <ueremos realizar la persistencia ! este cdi(o debe permitir almacenar en los
campos de la tabla todo el estado del ob/eto
E/emplo:
La Ilustracin - muestra el ob/eto de dominio Libro <ue deseamos +acer persistir. *ara esto en el
ob/eto "= deber5amos tener implementado el m@todo create <ue deberia ser similar al si(uiente
cdi(o:
public boolean create(Libro libro){
try {
// Prepara el statement
PreparedStatement statement =
DatabaseManager.getConnection().prepareStatement(
"!S"#$ !$% Libro &'L("S ( ) * ) * ) )")+
statement.setnteger(,*libro.getd())+
statement.setString(-*libro.get$itulo())+
statement.setString(.*libro.get'utor())+
statement.e/ecute(pdate()+
Elabor: Ismael Nuez
Ilustracin 1: Clase Libro
Libro
-id: Integer
-titulo: String
-autor: String
+getId(): Integer
+setId(Integer)
+getTitulo(): String
+setTitulo(String)
+getAutor(): String
+setAutor(String)
Tutorial de Hibernate
return true+
0 catc1 (S2L"/ception e) {
// Cac1a e/cepcion
e.printStac3$race()+
return 4alse+
0
0
En realidad +acer persistir un solo ob/eto en una tabla relacional es bastante sencillo; el problema es
<ue en la &ida real no solo se realiza persistencia de un solo ob/eto ! muc+o menos de &arios ob/etos
sin relacin entre ellos; como se puede notar el realizar persistencia en bases de datos relacionales es
bastante comple/o.
*ara sol&entar estos problemas e2isten 'rameAorBs <ue se encar(an de realizar este mapeo de =b/eto a
9elacional; a estos 'rameAorBs se les denomina =90 >=b/ect79elational 0appin(?. En esta tutorial
&amos a traba/ar con Hibernate; un =90 open source bastante maduro.
"ntes de entrar en el detalle de Hibernate &amos a mostrar como un =90 realiza el mapeo de
=rientado a 9elacional para <ue se obser&en las &enta/as de utilizar estos 'rameAorBs.
Cn buen =90 permite tomar un ob/eto %a&a ! +acerlo persistir de una 'orma similar a la
si(uiente:
orm.sa5e(ob6ect)+
la instruccin anterior debe (enerar todo el cdi(o SQL para realizar la persistencia del ob/eto
El =90 debe permitir car(ar un ob/eto %a&a comple/o >con relaciones +acia otros ob/etos? de la
base de datos a memoria:
my%b6ect = orm.load(My%b6ect.class*ob6ectd)+
EL =90 debe permitir +acer consultas a las tablas de la base de datos:
List my%b6ects = orm.4ind("7#%M My%b6ect ob6ect 89"#" ob6ect.property = :")+
$omo se puede obser&ar en estos e/emplos los m@todos sa5e; load ! 4ind tienen una correspondencia
con los m@todos create ! retrie5e <ue se implementan usualmente en un "=; pero con la &enta/a
de <ue son mas sencillos e intuiti&os de emplear ! reducen 'allas al crear todo el cdi(o SQL.
Elabor: Ismael Nuez
Tutorial de Hibernate
Herramientas necesarias
Hibernate
Se puede obtener Hibernate directamente de su pa(ina en Internet +ttp:DD+ibernate.or(D; de a<u5 se
puede obtener el zip de Hibernate 4.3.. <ue es la &ersin <ue &amos a utilizar.
espu@s de obtener el zip lo &amos a crear una carpeta llamada 1ome en la unidad C;; ! en esta &amos a
descomprimir el zip de Hibernate.
Nota: El nombre ! la localizacin de la carpeta es una su(erencia propuesta en este tutorial; si se
cambia el nombre ! la localizacin se deben a/ustar las direcciones en los sitios en donde se solicite
HSQL
HSQL se puede obtener de la pa(ina +ttp:DD+s<ldb.source'or(e.netD ; de esta &amos a descar(ar la
&ersin -.#.4.4 <ue &iene en zip.
Suponiendo <ue !a tenemos Hibernate &amos a descomprimir el zip de HSQL en la carpeta 1ome >o en
la misa en donde se descomprimi Hibernate?.
Eclipse
Eclipse es la +erramienta <ue &amos a emplear para realizar el desarrollo de nuestras aplicaciones; este
se puede obtener de la pa(ina +ttp:DDAAA.eclipse.or(DdoAnloadsD . La &ersin <ue &amos a utilizar sera
la 4.. <ue tambi@n &iene en un zip <ue &amos a descomprimir en C;.
Derby
erb! es una base de datos embebida; open source <ue utilizaremos en lu(ar de HSQL en al(unos de
los e/emplos de este tutorial. Se puede obtener de la pa(ina +ttp:DDdb.apac+e.or(Dderb!DreleasesDrelease7
-3.-...-.c(i. *ara este tutorial utilizaremos la &ersin -3.-...- <ue se obtiene en un zip de la pa(ina
antes mencionada.
Elabor: Ismael Nuez
Tutorial de Hibernate
Aplicacin sencilla usando Hibernate
=b/eti&o de la aplicacin:
En esta aplicacin &amos a crear una clase Libro <ue sera nuestro ob/eto de dominio ! crearemos una
tabla LI)9= usando Hibernate para realizar . operaciones sencillas: insertar un libro ! &er la lista de
libros en la base de datos.
Crear el proyecto Java con Eclipse
Eamos a crear la carpeta Hibernate en la carpeta +s<ldb ><ue se crea al descomprimir HSQL? ! &amos
a abrir Eclipse ! darle como direccin de AorBspace la direccin de la carpeta <ue creamos
Cna &ez en Eclipse &amos a crear un nue&o pro!ecto al <ue llamaremos *ruebaHibernate. "l crearla le
a(re(amos la carpeta de 'uentes src ! el pacBa(e m2.uam.+ibernate.
Elabor: Ismael Nuez
Ilustracin 2: Seleccin de workspace
Ilustracin 3: rbol del proyecto
Tutorial de Hibernate
"+ora &amos a crear los directorios lib en donde &amos a a(re(ar las librer5as <ue &amos a ocupar !
data en donde HSQL (enera una bitFcora de las operaciones +ec+as en la base de datos; estos
directorios se crean en la ra5z del pro!ecto.
En el directorio de lib &amos a copiar del directorio lib de Hibernate los si(uientes /ars:
c(lib7..-
commons7lo((in(7-.3.4
+ibernate4
/ta
commons7collections7..-.-
dom4/7-.6
/dbc.G37stde2t
lo(4/7-...,
asm
antlr7..#.:H4
! del directorio lib de +s<l el /ar +s<l./ar
Elabor: Ismael Nuez
Ilustracin 4: El directorio lib con los jars
necesarios
Tutorial de Hibernate
Configuracin del Build Path
Hasta este momento !a tenemos los /ars necesarios para traba/ar; a+ora +a! <ue decirle a Eclipse <ue
los a(re(ue a su build pat+ para <ue puede traba/ar con ellos. *ara +acer esto seleccionamos el pro!ecto
! sobre el damos clicB con el botn derec+o ! seleccionamos la opcin uild !at"78Con#i$ure uild
*at+ ; esto pro&oca <ue emer/a el dialo(o !roperties #or !rueba%ibernateen la seccin de &a'a uild
!at"; en esta seccin seleccionamos la opcin de add &()s* ! en el dialo(o <ue emer(e seleccionamos
del directorio lib de *ruebaHibernate uno de los /ars <ue a+5 aparecen ! presionamos +, ; esto a(re(a
el /ar al build pat+.

Elabor: Ismael Nuez
Ilustracin -: Seleccin de los &()S
Tutorial de Hibernate
9ealizamos la misma operacin para todos los /ar <ue se encuentren en el directorio lib ! una &ez
a(re(ados presionamos +,.
Elabor: Ismael Nuez
Ilustracin .: &() a$re$a al uild !at"
Tutorial de Hibernate
"l terminar tendremos una lista de /ars deba/o del %9E.
Elabor: Ismael Nuez
Ilustracin /: &()s a$re$ados al uild !at"
Tutorial de Hibernate
Creacin de las clases Java
*ara probar el 'uncionamiento de Hibernate &amos a crear . clases; - sera el ob/eto de dominio ! la
otra el ob/eto encar(ado de la persistencia usando Hibernate
Clase del objeto de dominio
Esta clase es una clase <ue modela la clase mostrada en la Ilustracin -; lo primero <ue +acemos es
crear la clase con el Aizard de eclipse.
Elabor: Ismael Nuez
Ilustracin 0: &()s a$re$ados al uild !at"
Tutorial de Hibernate
En esta clase a(re(amos el si(uiente cdi(o:
pac3age m/.uam.1ibernate+
public class Libro {
pri5ate Long id+
pri5ate String titulo+
Elabor: Ismael Nuez
Ilustracin 1: 2i3ard para crear la clase Libro
Tutorial de Hibernate
pri5ate String autor+
public String get'utor() {
return autor+
0
public 5oid set'utor(String autor) {
t1is.autor = autor+
0
public Long getd() {
return id+
0
pri5ate 5oid setd(Long id) {
t1is.id = id+
0
public String get$itulo() {
return titulo+
0
public 5oid set$itulo(String titulo) {
t1is.titulo = titulo+
0
0
$abe +acer notar <ue el m@todo setd es pri&ado; esto es por <ue solo Hibernate debe encar(arse de
administrar los idHs de los ob/etos Libro; tambi@n se debe notar <ue este m@todo marcara un Aarnin(
por <ue nin(In otro m@todo de la clase lo esta utilizando.
=tra cosa <ue &ale la pena mencionar es <ue no se debe declarar la &ariable id como un tipo de datos
primiti&o; esto por 'acilidad de mane/o para Hibernate.
Clase de Manejo del objeto de dominio
Esta clase se encar(a de administrar al ob/eto de dominio; primero con el Aizard de eclipse creamos la
clase 0ane/adorLibro
Elabor: Ismael Nuez
Tutorial de Hibernate
En esta clase a(re(amos el si(uiente cdi(o:
pac3age m/.uam.1ibernate+
import 6a5a.util.List+
import org.1ibernate.9ibernate"/ception+
import org.1ibernate.Session7actory+
import org.1ibernate.$ransaction+
Elabor: Ismael Nuez
Ilustracin 14: wi3ard para crear la clase 5anejadorLibro
Tutorial de Hibernate
import org.1ibernate.c4g.Con4iguration+
import org.1ibernate.classic.Session+
public class Mane6adorLibro {
pri5ate Session7actory session7actory+
public Mane6adorLibro() {
try {
System.out.println("nicali<ando 9ibernate")+
session7actory = ne= Con4iguration().con4igure().buildSession7actory()+
System.out.println("terminado la iniciali<acion de 9ibernate")+
0 catc1 (9ibernate"/ception e) {
e.printStac3$race()+
0
0

pri5ate 5oid agregaLibro(String titulo* String autor) {
try {
Session session = session7actory.openSession()+
$ransaction t/ = session.begin$ransaction()+

Libro libro = ne= Libro()+
libro.set$itulo(titulo)+
libro.set'utor(autor)+

session.sa5e(libro)+

t/.commit()+
session.close()+
0 catc1 (9ibernate"/ception e) {
e.printStac3$race()+
0
0
pri5ate List listaLibros() {
Elabor: Ismael Nuez
Tutorial de Hibernate
try {
Session session = session7actory.openSession()+
$ransaction t/ = session.begin$ransaction()+

List result = session.4ind("4rom Libro")+

t/.commit()+
session.close()+

return result+
0 catc1 (9ibernate"/ception e) {
t1ro= ne= #untime"/ception(e.getMessage())+
0
0
public static 5oid main(String>? args) {
Mane6adorLibro mane6adorLibro = ne= Mane6adorLibro()+
i4 (args>@?.eAuals("agrega")) {
i4(args>,? B= null CC args>-? B= null){
mane6adorLibro.agregaLibro(args>,?*args>-?)+
0else{
System.out.println("7altan parametros")+
0
0 else i4 (args>@?.eAuals("lista")) {
List libros = mane6adorLibro.listaLibros()+
4or (int i = @+ iDlibros.si<e()+ iEE) {
Libro libro = (Libro) libros.get(i)+
System.out.println("Libro; "Elibro.get$itulo()E"* 'utor;
"Elibro.get'utor())+
0
0
System.e/it(@)+
0
0
Esta clase recibe de la linea de comandos . tipos de comandos:
Elabor: Ismael Nuez
Tutorial de Hibernate
a(re(a titulo autor
lista
cabe mencionar <ue no se +an +ec+o todas las &alidaciones por la simplicidad de la aplicacin; pero
esto no e&ita <ue se puedan +acer.
Configuracin de Hibernate
Hasta a+ora solo +emos mencionado al(unos aspectos de Hibernate pero no +emos +ec+o nin(una
con'i(uracin del ser&icio; en este momento &amos a con'i(urar a Hibernate para <ue conozca al ob/eto
<ue debe +acer persistir ! en donde lo +arF persistir.
El archivo hibernate.cfg.ml
En directorio src creamos el arc+i&o +ibernate.c'(.2ml ! a(re(amos el si(uiente codi(o:
D)/ml 5ersion=F,.@F encoding=Fut4GHF)I
DBD%C$JP" 1ibernateGcon4iguration
P(KLC "G//9ibernate/9ibernate Con4iguration D$D//"!"
"1ttp;//1ibernate.source4orge.net/1ibernateGcon4igurationG..@.dtd"I
D1ibernateGcon4igurationI
DsessionG4actoryI
Dproperty
name="1ibernate.connection.dri5erLclass"Iorg.1sAldb.6dbcDri5erD/propertyI
Dproperty name="1ibernate.connection.url"I6dbc;1sAldb;data/testD/propertyI
Dproperty name="1ibernate.connection.username"IsaD/propertyI
Dproperty name="1ibernate.connection.pass=ord"ID/propertyI
Dproperty name="dialect"Iorg.1ibernate.dialect.9S2LDialectD/propertyI
Dproperty name="s1o=LsAl"ItrueD/propertyI
Dproperty name="transaction.4actoryLclass"I
org.1ibernate.transaction.MDKC$ransaction7actory
D/propertyI
Dproperty name="1ibernate.cac1e.pro5iderLclass"I
org.1ibernate.cac1e.9as1tableCac1ePro5ider
D/propertyI
Dproperty name="1ibernate.1bm-ddl.auto"IupdateD/propertyI
Dmapping resource="m//uam/1ibernate/data/Libro.1bm./ml"/I
D/sessionG4actoryI
D/1ibernateGcon4igurationI
Este arc+i&o contiene &arios ta(s; pero lo importante es lo <ue contiene el ta( +ibernate7con'i(uration;
en este ta( aparece otro llamado session7'actor! <ue contiene; en orden de aparicin:
La clase del mane/ador de %)$
La C9L del la cone2in con %)$
Elabor: Ismael Nuez
Tutorial de Hibernate
El nombre de usuario de la base da datos
El passAord del usuario de la base de datos
El dialecto <ue Hibernate usara para realizar la persistencia del ob/eto
)andera para poder obser&ar el cdi(o SQL
La clase <ue se empleara para el mane/o de las transacciones
La clase <ue pro&ee la implementacin de la inter'az de $ac+e*ro&ider
"utomFticamente actualiza los es<uemas de la base de datos cuando se inicia ! se apa(a. *uede
tomar 4 &alores: create; update ! create7drop
El mapa <ue describe al ob/eto ! su localizacin
El archivo !ibro.hbm.ml
Este arc+i&o le dice a Hibernate como es el ob/eto <ue debe persistir. Este arc+i&o se debe colocar en el
directorio <ue se di/o en el arc+i&o de con'i(uracin de Hibernate; para esto debemos crear un
directorio en el pacBa(e m2.uam.+ibernate llamado data ! crear un arc+i&o llamado Libro.+bm.2ml con
la si(uiente in'ormacin:
D)/ml 5ersion=",.@")I
DBD%C$JP" 1ibernateGmapping P(KLC
"G//1ibernate/1ibernate Mapping D$D -.@//"!"
"1ttp;//1ibernate.source4orge.net/1ibernateGmappingG-.@.dtd"I
D1ibernateGmappingI
Dclass name="m/.uam.1ibernate.Libro" table="LK#%"I
Did name="id" column="uid" type="long"I
Dgenerator class="increment"/I
D/idI
Dproperty name="titulo" type="string"/I
Dproperty name="autor" type="string"/I
D/classI
D/1ibernateGmappingI
Este documento contiene el ta( +ibernate7mappin( <ue contiene el ta( class <ue es el <ue contiene la
in'ormacin de la estructura del ob/eto; esta in'ormacin es:
El nombre de la clase ! la tabla en la <ue se +arF la persistencia
El ta( id <ue dice a <ue columna se &a a mapear; su tipo ! la 'orma en <ue se (enera el
identi'icador
Las propiedades de la clase ! su tipo
$abe mencionar <ue Hibernate puede (enerar de &arias 'ormas un identi'icador ! <ue en las
propiedades se pueden especi'icar otras cosas tales como: el nombre de la columna; la inte(ridad
re'erencial; etc.
Elabor: Ismael Nuez
Tutorial de Hibernate
Creacin del archivo log"j.properties
La librer5a lo(./ sir&e para realizar trazas en una aplicacin; estas trazas las puede en&iar directamente
a una bitFcora en disco o en consola; para realizar cual<uiera de estas operaciones es necesario
con'i(urar un arc+i&o llamado lo(./.properties; para el ob/eti&o de esta aplicacin solo es necesario se
re<uiere <ue se cree este arc+i&o en el directorio de src ! se a(re(ue el si(uiente te2to:
logN6.rootCategory=!7%* ',
logN6.appender.',=org.apac1e.logN6.Console'ppender
logN6.appender.',.layout=org.apac1e.logN6.PatternLayout
logN6.appender.',.layout.Con5ersionPattern=OG:p G OmOn
Hasta este momento deber5amos tener un pro!ecto similar al si(uiente:
uto!ati"acin del proceso de construccin con #$
En el directorio ra5z de nuestra aplicacin &amos a crear un arc+i&o build.2ml para <ue "NT
automatice el proceso de construccin de la aplicacin.
Elabor: Ismael Nuez
Ilustracin 11: 6ista del proyecto
Tutorial de Hibernate
En este arc+i&o &amos a re<uerir de las si(uientes tareas:
init: eclaracin de las propiedades <ue empleara el sistema
prepare: $reacin de los directorios
cop!7resources: $opia los arc+i&os de con'i(uracin de Hibernate ! lo(./ al directorio bin del
pro!ecto
compile: $ompila el pro!ecto
run: $orre la aplicacin ! a(re(a los parFmetros necesarios
El arc+i&o build.2ml debe &erse de la si(uiente manera:
Dpro6ect name="Prueba de 1ibernate" de4ault="run"I
Dtarget name="init"I
Dproperty name="src.dir" 5alue="src"/I
Dproperty name="classes.dir" 5alue="bin"/I
Dproperty name="lib.dir" 5alue="lib"/I
Dproperty name="mainclass" 5alue="m/.uam.1ibernate.Mane6adorLibro"/I
Dpat1 id="classpat1"I
Dpat1element location="P{classes.dir0" /I
D4ileset dir="P{lib.dir0"I
Dinclude name="Q.6ar" /I
D/4ilesetI
D/pat1I
D/targetI
Dtarget name="prepare" depends="init"I
Dm3dir dir="P{classes.dir0"/I
Dm3dir dir="P{lib.dir0"/I
D/targetI
Dtarget name="compile" depends="copyGresources"I
D6a5ac srcdir="P{src.dir0" destdir="P{classes.dir0"I
Dclasspat1 re4id="classpat1" /I
D/6a5acI
D/targetI
Dtarget name="copyGresources" depends="prepare"I
Dcopy todir="P{classes.dir0"I
D4ileset dir="P{src.dir0"I
De/clude name="QQ/Q.6a5a"/I
Elabor: Ismael Nuez
Tutorial de Hibernate
D/4ilesetI
D/copyI
D/targetI
Dtarget name="run" depends="compile"I
D6a5a classname="P{mainclass0" 4or3="true"I
Darg 5alue="agrega"/I
Darg 5alue="$utorial"/I
Darg 5alue="ngS8"/I
Dclasspat1 re4id="classpat1" /I
D/6a5aI
D/targetI
D/pro6ectI
Correr la aplicacin
*ara poder correr la aplicacin &amos a abrir la &ista de "NT; para esto &amos a al menI principal !
seleccionamos JindoA78S+oA EieA78"nt; despu@s seleccionamos el arc+i&o build.2ml ! lo
arrastramos +asta colocarlo en la &ista de "NT.
El si(uiente para es dar doble clicB cobre la tarea KrunL ! en la consola debe desple(arse al(o similar a:
Kuild4ile; C;R1omeR1sAldbR1ibernateRPrueba9ibernateRbuild./ml
init;
prepare;
copyGresources;
compile;
run;
>6a5a? nicali<ando 9ibernate
>6a5a? !7% G 9ibernate ..@.-
Elabor: Ismael Nuez
Ilustracin 12: 6ista de (78
con las tareas declaradas en
el arc"i'o build9:;l
Tutorial de Hibernate
>6a5a? !7% G 1ibernate.properties not 4ound
>6a5a? !7% G using CSLK re4lection optimi<er
>6a5a? !7% G using MDT ,.N 6a5a.sAl.$imestamp 1andling
>6a5a? !7% G con4iguring 4rom resource; /1ibernate.c4g./ml
>6a5a? !7% G Con4iguration resource; /1ibernate.c4g./ml
>6a5a? !7% G Mapping resource; m//uam/1ibernate/data/Libro.1bm./ml
>6a5a? !7% G Mapping class; m/.uam.1ibernate.Libro GI LK#%
>6a5a? !7% G Con4igured Session7actory; null
>6a5a? !7% G processing e/tends Aueue
>6a5a? !7% G processing collection mappings
>6a5a? !7% G processing association property re4erences
>6a5a? !7% G processing 4oreign 3ey constraints
>6a5a? !7% G (sing 9ibernate builtGin connection pool (not 4or production
useB)
>6a5a? !7% G 9ibernate connection pool si<e; -@
>6a5a? !7% G autocommit mode; 4alse
>6a5a? !7% G using dri5er; org.1sAldb.6dbcDri5er at (#L;
6dbc;1sAldb;data/test
>6a5a? !7% G connection properties; {user=sa* pass=ord=QQQQ0
>6a5a? !7% G #DKMS; 9S2L Database "ngine* 5ersion; ,.U..
>6a5a? !7% G MDKC dri5er; 9S2L Database "ngine Dri5er* 5ersion; ,.U..
>6a5a? !7% G (sing dialect; org.1ibernate.dialect.9S2LDialect
>6a5a? !7% G MDKC batc1 si<e; ,:
>6a5a? !7% G MDKC batc1 updates 4or 5ersioned data; disabled
>6a5a? !7% G Scrollable result sets; enabled
>6a5a? !7% G MDKC. getSeneratedTeys(); disabled
>6a5a? !7% G 'ggressi5e release ; disabled
>6a5a? !7% G De4ault batc1 4etc1 si<e; ,
>6a5a? !7% G Senerate S2L =it1 comments; disabled
>6a5a? !7% G %rder S2L updates by primary 3ey; disabled
>6a5a? !7% G 2uery translator;
org.1ibernate.1Al.ast.'S$2uery$ranslator7actory
>6a5a? !7% G (sing 'S$2uery$ranslator7actory
>6a5a? !7% G 2uery language substitutions; {0
>6a5a? !7% G $ransaction strategy;
org.1ibernate.transaction.MDKC$ransaction7actory
>6a5a? !7% G !o $ransactionManagerLoo3up con4igured (in M$' en5ironment* use
o4 readG=rite or transactional secondGle5el cac1e is not recommended)
>6a5a? !7% G 'utomatic 4lus1 during be4oreCompletion(); disabled
>6a5a? !7% G 'utomatic session close at end o4 transaction; disabled
>6a5a? !7% G SecondGle5el cac1e; enabled
>6a5a? !7% G 2uery cac1e; disabled
>6a5a? !7% G Cac1e pro5ider; org.1ibernate.cac1e.9as1tableCac1ePro5ider
>6a5a? !7% G %ptimi<e cac1e 4or minimal puts; disabled
>6a5a? !7% G Structured secondGle5el cac1e entries; enabled
>6a5a? !7% G "c1oing all S2L to stdout
>6a5a? !7% G Statistics; disabled
>6a5a? !7% G Deleted entity synt1etic identi4ier rollbac3; disabled
>6a5a? !7% G De4ault entityGmode; po6o
>6a5a? !7% G building session 4actory
>6a5a? !7% G !ot binding 4actory to M!D* no M!D name con4igured
>6a5a? !7% G (sing dialect; org.1ibernate.dialect.9S2LDialect
>6a5a? !7% G (sing 9ibernate builtGin connection pool (not 4or production
useB)
>6a5a? !7% G 9ibernate connection pool si<e; -@
Elabor: Ismael Nuez
Tutorial de Hibernate
>6a5a? !7% G autocommit mode; 4alse
>6a5a? !7% G using dri5er; org.1sAldb.6dbcDri5er at (#L;
6dbc;1sAldb;data/test
>6a5a? !7% G connection properties; {user=sa* pass=ord=QQQQ0
>6a5a? !7% G #unning 1bm-ddl sc1ema update
>6a5a? !7% G 4etc1ing database metadata
>6a5a? !7% G updating sc1ema
>6a5a? !7% G processing e/tends Aueue
>6a5a? !7% G processing collection mappings
>6a5a? !7% G processing association property re4erences
>6a5a? !7% G processing 4oreign 3ey constraints
>6a5a? !7% G table 4ound; LK#%
>6a5a? !7% G columns; >titulo* uid* autor?
>6a5a? !7% G 4oreign 3eys; >?
>6a5a? !7% G inde/es; >sysLp3Llibro?
>6a5a? !7% G sc1ema update complete
>6a5a? !7% G cleaning up connection pool; 6dbc;1sAldb;data/test
>6a5a? !7% G C1ec3ing @ named Aueries
>6a5a? terminado la iniciali<acion de 9ibernate
>6a5a? 9ibernate; insert into LK#% (titulo* autor* uid) 5alues ()* )* ))
K(LD S(CC"SS7(L
$otal time; . seconds
$on esto +emos a(re(ado una entrada a la tabla LI)9= con la in'ormacion:
Titulo: Tutorial
"utor: In(SJ
Esta es la in'ormacin <ue le pasamos al pro(rama en las lineas de "NT de la tarea run:
Darg 5alue="agrega"/I
Darg 5alue="$utorial"/I
Darg 5alue="ngS8"/I
*ara obser&ar <ue esta entrada en la tabla +a sido persistida por Hibernate cambiaremos estas lineas
por:
Darg 5alue="lista"/I
"+ora damos doble clicB en la tarea run ! debe aparecer al(o similar a:
Kuild4ile; C;R1omeR1sAldbR1ibernateRPrueba9ibernateRbuild./ml
init;
prepare;
copyGresources;
compile;
run;
>6a5a? nicali<ando 9ibernate
>6a5a? !7% G 9ibernate ..@.-
>6a5a? !7% G 1ibernate.properties not 4ound
>6a5a? !7% G using CSLK re4lection optimi<er
>6a5a? !7% G using MDT ,.N 6a5a.sAl.$imestamp 1andling
>6a5a? !7% G con4iguring 4rom resource; /1ibernate.c4g./ml
>6a5a? !7% G Con4iguration resource; /1ibernate.c4g./ml
>6a5a? !7% G Mapping resource; m//uam/1ibernate/data/Libro.1bm./ml
>6a5a? !7% G Mapping class; m/.uam.1ibernate.Libro GI LK#%
Elabor: Ismael Nuez
Tutorial de Hibernate
>6a5a? !7% G Con4igured Session7actory; null
>6a5a? !7% G processing e/tends Aueue
>6a5a? !7% G processing collection mappings
>6a5a? !7% G processing association property re4erences
>6a5a? !7% G processing 4oreign 3ey constraints
>6a5a? !7% G (sing 9ibernate builtGin connection pool (not 4or production
useB)
>6a5a? !7% G 9ibernate connection pool si<e; -@
>6a5a? !7% G autocommit mode; 4alse
>6a5a? !7% G using dri5er; org.1sAldb.6dbcDri5er at (#L;
6dbc;1sAldb;data/test
>6a5a? !7% G connection properties; {user=sa* pass=ord=QQQQ0
>6a5a? !7% G #DKMS; 9S2L Database "ngine* 5ersion; ,.U..
>6a5a? !7% G MDKC dri5er; 9S2L Database "ngine Dri5er* 5ersion; ,.U..
>6a5a? !7% G (sing dialect; org.1ibernate.dialect.9S2LDialect
>6a5a? !7% G MDKC batc1 si<e; ,:
>6a5a? !7% G MDKC batc1 updates 4or 5ersioned data; disabled
>6a5a? !7% G Scrollable result sets; enabled
>6a5a? !7% G MDKC. getSeneratedTeys(); disabled
>6a5a? !7% G 'ggressi5e release ; disabled
>6a5a? !7% G De4ault batc1 4etc1 si<e; ,
>6a5a? !7% G Senerate S2L =it1 comments; disabled
>6a5a? !7% G %rder S2L updates by primary 3ey; disabled
>6a5a? !7% G 2uery translator;
org.1ibernate.1Al.ast.'S$2uery$ranslator7actory
>6a5a? !7% G (sing 'S$2uery$ranslator7actory
>6a5a? !7% G 2uery language substitutions; {0
>6a5a? !7% G $ransaction strategy;
org.1ibernate.transaction.MDKC$ransaction7actory
>6a5a? !7% G !o $ransactionManagerLoo3up con4igured (in M$' en5ironment* use
o4 readG=rite or transactional secondGle5el cac1e is not recommended)
>6a5a? !7% G 'utomatic 4lus1 during be4oreCompletion(); disabled
>6a5a? !7% G 'utomatic session close at end o4 transaction; disabled
>6a5a? !7% G SecondGle5el cac1e; enabled
>6a5a? !7% G 2uery cac1e; disabled
>6a5a? !7% G Cac1e pro5ider; org.1ibernate.cac1e.9as1tableCac1ePro5ider
>6a5a? !7% G %ptimi<e cac1e 4or minimal puts; disabled
>6a5a? !7% G Structured secondGle5el cac1e entries; enabled
>6a5a? !7% G "c1oing all S2L to stdout
>6a5a? !7% G Statistics; disabled
>6a5a? !7% G Deleted entity synt1etic identi4ier rollbac3; disabled
>6a5a? !7% G De4ault entityGmode; po6o
>6a5a? !7% G building session 4actory
>6a5a? !7% G !ot binding 4actory to M!D* no M!D name con4igured
>6a5a? !7% G (sing dialect; org.1ibernate.dialect.9S2LDialect
>6a5a? !7% G (sing 9ibernate builtGin connection pool (not 4or production
useB)
>6a5a? !7% G 9ibernate connection pool si<e; -@
>6a5a? !7% G autocommit mode; 4alse
>6a5a? !7% G using dri5er; org.1sAldb.6dbcDri5er at (#L;
6dbc;1sAldb;data/test
>6a5a? !7% G connection properties; {user=sa* pass=ord=QQQQ0
>6a5a? !7% G #unning 1bm-ddl sc1ema update
>6a5a? !7% G 4etc1ing database metadata
>6a5a? !7% G updating sc1ema
Elabor: Ismael Nuez
Tutorial de Hibernate
>6a5a? !7% G processing e/tends Aueue
>6a5a? !7% G processing collection mappings
>6a5a? !7% G processing association property re4erences
>6a5a? !7% G processing 4oreign 3ey constraints
>6a5a? !7% G table 4ound; LK#%
>6a5a? !7% G columns; >titulo* uid* autor?
>6a5a? !7% G 4oreign 3eys; >?
>6a5a? !7% G inde/es; >sysLp3Llibro?
>6a5a? !7% G sc1ema update complete
>6a5a? !7% G cleaning up connection pool; 6dbc;1sAldb;data/test
>6a5a? !7% G C1ec3ing @ named Aueries
>6a5a? terminado la iniciali<acion de 9ibernate
>6a5a? 9ibernate; select libro@L.uid as uid* libro@L.titulo as titulo@L*
libro@L.autor as autor@L 4rom LK#% libro@L
>6a5a? Libro; $utorial* 'utor; ngS8
K(LD S(CC"SS7(L
$otal time; . seconds
Aplicacin sencilla utili#ando Hibernate $ %erb$
En el e/emplo anterior utilizamos HSQL como el medio para +acer la persistencia de nuestro ob/eto de
dominio Libro* pero esto no si(ni'ica <ue sea la Inica 'orma de lo(rar +acer persistir a nuestros
ob/etos. Hibernate conoce &arios dialectos de SQL <ue permiten realizan la cone2in entre Hibernate !
otros mane/adores de bases de datos.
En este caso &amos a empleas erb! para realizar la persistencia de nuestro ob/eto de dominio. El
primer paso es obtener erb! de la pa(ina <ue !a se menciono con anterioridad; despu@s se
descomprime el zip; dentro de la carpeta dbGderbyG,@.,.-.,Gbin <ue se (enera al descomprimir el
/ars se encuentra la carpeta lib <ue contiene &arios /ars; de esta carpeta copias el /ar derb!./ar a la
carpeta lib de nuestro pro!ecto.
"+ora abrimos Eclipse ! a(re(amos al )uild *at+ el /ar <ue acabamos de copiar.
Elabor: Ismael Nuez
Tutorial de Hibernate
Configuracin de el archivo hibernate%cfg%&!l
*ara poder +acer uso de erb! re<uerimos decirle a Hibernate como comunicarse con erb!; para
lo(rar esto re<uerimos modi'icar el arc+i&o de con'i(uracin de Hibernate.
*ara realizar la comunicacin con erb! se necesitan modi'icar las si(uientes propiedades con los
&alores dados:
+ibernate.connection.dri&erGclass 78 or(.apac+e.derb!./dbc.Embeddedri&er
+ibernate.connection.url 78 /dbc:derb!:buildDderb!D+ibernateMcreateNtrue
dialect 78 or(.+ibernate.dialect.erb!ialect
El arc+i&o de con'i(uracin de Hibernate deberia <uedar parecido a:
Elabor: Ismael Nuez
Ilustracin 13: &() de <erby en
nuestro proyecto
Tutorial de Hibernate
D)/ml 5ersion=F,.@F encoding=Fut4GHF)I
DBD%C$JP" 1ibernateGcon4iguration
P(KLC "G//9ibernate/9ibernate Con4iguration D$D//"!"
"1ttp;//1ibernate.source4orge.net/1ibernateGcon4igurationG..@.dtd"I
D1ibernateGcon4igurationI
DsessionG4actoryI
Dproperty
name="1ibernate.connection.dri5erLclass"Iorg.apac1e.derby.6dbc."mbeddedDri5erD/prop
ertyI
Dproperty
name="1ibernate.connection.url"I6dbc;derby;build/derby/1ibernate+create=trueD/prope
rtyI
Dproperty name="1ibernate.connection.username"IsaD/propertyI
Dproperty name="1ibernate.connection.pass=ord"ID/propertyI
Dproperty name="dialect"Iorg.1ibernate.dialect.DerbyDialectD/propertyI
Dproperty name="s1o=LsAl"ItrueD/propertyI
Dproperty name="transaction.4actoryLclass"I
org.1ibernate.transaction.MDKC$ransaction7actory
D/propertyI
Dproperty name="1ibernate.cac1e.pro5iderLclass"I
org.1ibernate.cac1e.9as1tableCac1ePro5ider
D/propertyI
Dproperty name="1ibernate.1bm-ddl.auto"IupdateD/propertyI
Dmapping resource="m//uam/1ibernate/data/Libro.1bm./ml"/I
D/sessionG4actoryI
D/1ibernateGcon4igurationI
Lo <ue le decimos a Hibernate es:
Que ri&er utilice para comunicarse con erb!
Que C9L utilizara para comunicarse
En <ue dialecto debe +ablar
Esta es la Inica modi'icacin <ue se le debe realizar a la aplicacin para <ue 'uncione; despu@s de esto
debe 'uncionar tal ! como 'uncionaba con HSQL; a e2cepcin de <ue la in'ormacin <ue conten5a
HSQL e&identemente no esta en erb!
Corriendo la aplicacin
Cna &ez realizadas las modi'icaciones mencionadas modi'icamos los parFmetros <ue se le pasan al
pro(rama para <ue a(re(ue una entrada en la base de datos erb!.
E/emplo:
Elabor: Ismael Nuez
Tutorial de Hibernate
Dtarget name="run" depends="compile"I
D6a5a classname="P{mainclass0" 4or3="true"I
Darg 5alue="agrega"/I
Darg 5alue="$utorial"/I
Darg 5alue="ngS8"/I
Dclasspat1 re4id="classpat1" /I
D/6a5aI
D/targetI
"+ora sal&amos el arc+i&o build.2ml ! en la &ista de "NT damos doble clicB sobre la tarea run; esto
debe (enerar una entrada en la base de datos ! dar la si(uiente traza:
Kuild4ile; C;R1omeR1sAldbR1ibernateRPrueba9ibernateRbuild./ml
init;
prepare;
copyGresources;
compile;
run;
>6a5a? nicali<ando 9ibernate
>6a5a? !7% G 9ibernate ..@.-
>6a5a? !7% G 1ibernate.properties not 4ound
>6a5a? !7% G using CSLK re4lection optimi<er
>6a5a? !7% G using MDT ,.N 6a5a.sAl.$imestamp 1andling
>6a5a? !7% G con4iguring 4rom resource; /1ibernate.c4g./ml
>6a5a? !7% G Con4iguration resource; /1ibernate.c4g./ml
>6a5a? !7% G Mapping resource; m//uam/1ibernate/data/Libro.1bm./ml
>6a5a? !7% G Mapping class; m/.uam.1ibernate.Libro GI LK#%
>6a5a? !7% G Con4igured Session7actory; null
>6a5a? !7% G processing e/tends Aueue
>6a5a? !7% G processing collection mappings
>6a5a? !7% G processing association property re4erences
>6a5a? !7% G processing 4oreign 3ey constraints
>6a5a? !7% G (sing 9ibernate builtGin connection pool (not 4or production
useB)
>6a5a? !7% G 9ibernate connection pool si<e; -@
>6a5a? !7% G autocommit mode; 4alse
>6a5a? !7% G using dri5er; org.apac1e.derby.6dbc."mbeddedDri5er at (#L;
6dbc;derby;build/derby/1ibernate+create=true
>6a5a? !7% G connection properties; {user=sa* pass=ord=QQQQ0
>6a5a? !7% G #DKMS; 'pac1e Derby* 5ersion; ,@.,.-.,
>6a5a? !7% G MDKC dri5er; 'pac1e Derby "mbedded MDKC Dri5er* 5ersion;
,@.,.-.,
>6a5a? !7% G (sing dialect; org.1ibernate.dialect.DerbyDialect
>6a5a? !7% G Scrollable result sets; enabled
>6a5a? !7% G MDKC. getSeneratedTeys(); disabled
>6a5a? !7% G 'ggressi5e release ; disabled
>6a5a? !7% G De4ault batc1 4etc1 si<e; ,
>6a5a? !7% G Senerate S2L =it1 comments; disabled
>6a5a? !7% G %rder S2L updates by primary 3ey; disabled
>6a5a? !7% G 2uery translator;
org.1ibernate.1Al.ast.'S$2uery$ranslator7actory
>6a5a? !7% G (sing 'S$2uery$ranslator7actory
Elabor: Ismael Nuez
Tutorial de Hibernate
>6a5a? !7% G 2uery language substitutions; {0
>6a5a? !7% G $ransaction strategy;
org.1ibernate.transaction.MDKC$ransaction7actory
>6a5a? !7% G !o $ransactionManagerLoo3up con4igured (in M$' en5ironment* use
o4 readG=rite or transactional secondGle5el cac1e is not recommended)
>6a5a? !7% G 'utomatic 4lus1 during be4oreCompletion(); disabled
>6a5a? !7% G 'utomatic session close at end o4 transaction; disabled
>6a5a? !7% G SecondGle5el cac1e; enabled
>6a5a? !7% G 2uery cac1e; disabled
>6a5a? !7% G Cac1e pro5ider; org.1ibernate.cac1e.9as1tableCac1ePro5ider
>6a5a? !7% G %ptimi<e cac1e 4or minimal puts; disabled
>6a5a? !7% G Structured secondGle5el cac1e entries; enabled
>6a5a? !7% G "c1oing all S2L to stdout
>6a5a? !7% G Statistics; disabled
>6a5a? !7% G Deleted entity synt1etic identi4ier rollbac3; disabled
>6a5a? !7% G De4ault entityGmode; po6o
>6a5a? !7% G building session 4actory
>6a5a? !7% G !ot binding 4actory to M!D* no M!D name con4igured
>6a5a? !7% G (sing dialect; org.1ibernate.dialect.DerbyDialect
>6a5a? !7% G (sing 9ibernate builtGin connection pool (not 4or production
useB)
>6a5a? !7% G 9ibernate connection pool si<e; -@
>6a5a? !7% G autocommit mode; 4alse
>6a5a? !7% G using dri5er; org.apac1e.derby.6dbc."mbeddedDri5er at (#L;
6dbc;derby;build/derby/1ibernate+create=true
>6a5a? !7% G connection properties; {user=sa* pass=ord=QQQQ0
>6a5a? !7% G #unning 1bm-ddl sc1ema update
>6a5a? !7% G 4etc1ing database metadata
>6a5a? !7% G updating sc1ema
>6a5a? !7% G processing e/tends Aueue
>6a5a? !7% G processing collection mappings
>6a5a? !7% G processing association property re4erences
>6a5a? !7% G processing 4oreign 3ey constraints
>6a5a? !7% G table not 4ound; LK#%
>6a5a? !7% G table not 4ound; LK#%
>6a5a? !7% G sc1ema update complete
>6a5a? !7% G cleaning up connection pool;
6dbc;derby;build/derby/1ibernate+create=true
>6a5a? !7% G C1ec3ing @ named Aueries
>6a5a? terminado la iniciali<acion de 9ibernate
>6a5a? 9ibernate; insert into LK#% (titulo* autor* uid) 5alues ()* )* ))
K(LD S(CC"SS7(L
$otal time; V seconds
"+ora para probar <ue se a(re(o la entrada en la base de datos cambiando los ar(umentos de la tarea
run por:
Darg 5alue="lista"/I
Esto (enera una traza parecida a la si(uiente:
Elabor: Ismael Nuez
Tutorial de Hibernate
Kuild4ile; C;R1omeR1sAldbR1ibernateRPrueba9ibernateRbuild./ml
init;
prepare;
copyGresources;
compile;
run;
>6a5a? nicali<ando 9ibernate
>6a5a? !7% G 9ibernate ..@.-
>6a5a? !7% G 1ibernate.properties not 4ound
>6a5a? !7% G using CSLK re4lection optimi<er
>6a5a? !7% G using MDT ,.N 6a5a.sAl.$imestamp 1andling
>6a5a? !7% G con4iguring 4rom resource; /1ibernate.c4g./ml
>6a5a? !7% G Con4iguration resource; /1ibernate.c4g./ml
>6a5a? !7% G Mapping resource; m//uam/1ibernate/data/Libro.1bm./ml
>6a5a? !7% G Mapping class; m/.uam.1ibernate.Libro GI LK#%
>6a5a? !7% G Con4igured Session7actory; null
>6a5a? !7% G processing e/tends Aueue
>6a5a? !7% G processing collection mappings
>6a5a? !7% G processing association property re4erences
>6a5a? !7% G processing 4oreign 3ey constraints
>6a5a? !7% G (sing 9ibernate builtGin connection pool (not 4or production
useB)
>6a5a? !7% G 9ibernate connection pool si<e; -@
>6a5a? !7% G autocommit mode; 4alse
>6a5a? !7% G using dri5er; org.apac1e.derby.6dbc."mbeddedDri5er at (#L;
6dbc;derby;build/derby/1ibernate+create=true
>6a5a? !7% G connection properties; {user=sa* pass=ord=QQQQ0
>6a5a? !7% G #DKMS; 'pac1e Derby* 5ersion; ,@.,.-.,
>6a5a? !7% G MDKC dri5er; 'pac1e Derby "mbedded MDKC Dri5er* 5ersion;
,@.,.-.,
>6a5a? !7% G (sing dialect; org.1ibernate.dialect.DerbyDialect
>6a5a? !7% G Scrollable result sets; enabled
>6a5a? !7% G MDKC. getSeneratedTeys(); disabled
>6a5a? !7% G 'ggressi5e release ; disabled
>6a5a? !7% G De4ault batc1 4etc1 si<e; ,
>6a5a? !7% G Senerate S2L =it1 comments; disabled
>6a5a? !7% G %rder S2L updates by primary 3ey; disabled
>6a5a? !7% G 2uery translator;
org.1ibernate.1Al.ast.'S$2uery$ranslator7actory
>6a5a? !7% G (sing 'S$2uery$ranslator7actory
>6a5a? !7% G 2uery language substitutions; {0
>6a5a? !7% G $ransaction strategy;
org.1ibernate.transaction.MDKC$ransaction7actory
>6a5a? !7% G !o $ransactionManagerLoo3up con4igured (in M$' en5ironment* use
o4 readG=rite or transactional secondGle5el cac1e is not recommended)
>6a5a? !7% G 'utomatic 4lus1 during be4oreCompletion(); disabled
>6a5a? !7% G 'utomatic session close at end o4 transaction; disabled
>6a5a? !7% G SecondGle5el cac1e; enabled
>6a5a? !7% G 2uery cac1e; disabled
>6a5a? !7% G Cac1e pro5ider; org.1ibernate.cac1e.9as1tableCac1ePro5ider
>6a5a? !7% G %ptimi<e cac1e 4or minimal puts; disabled
>6a5a? !7% G Structured secondGle5el cac1e entries; enabled
>6a5a? !7% G "c1oing all S2L to stdout
>6a5a? !7% G Statistics; disabled
>6a5a? !7% G Deleted entity synt1etic identi4ier rollbac3; disabled
Elabor: Ismael Nuez
Tutorial de Hibernate
>6a5a? !7% G De4ault entityGmode; po6o
>6a5a? !7% G building session 4actory
>6a5a? !7% G !ot binding 4actory to M!D* no M!D name con4igured
>6a5a? !7% G (sing dialect; org.1ibernate.dialect.DerbyDialect
>6a5a? !7% G (sing 9ibernate builtGin connection pool (not 4or production
useB)
>6a5a? !7% G 9ibernate connection pool si<e; -@
>6a5a? !7% G autocommit mode; 4alse
>6a5a? !7% G using dri5er; org.apac1e.derby.6dbc."mbeddedDri5er at (#L;
6dbc;derby;build/derby/1ibernate+create=true
>6a5a? !7% G connection properties; {user=sa* pass=ord=QQQQ0
>6a5a? !7% G #unning 1bm-ddl sc1ema update
>6a5a? !7% G 4etc1ing database metadata
>6a5a? !7% G updating sc1ema
>6a5a? !7% G processing e/tends Aueue
>6a5a? !7% G processing collection mappings
>6a5a? !7% G processing association property re4erences
>6a5a? !7% G processing 4oreign 3ey constraints
>6a5a? !7% G table 4ound; .S'.LK#%
>6a5a? !7% G columns; >titulo* uid* autor?
>6a5a? !7% G 4oreign 3eys; >?
>6a5a? !7% G inde/es; >sAl@V@W@U@@N--V,N@?
>6a5a? !7% G sc1ema update complete
>6a5a? !7% G cleaning up connection pool;
6dbc;derby;build/derby/1ibernate+create=true
>6a5a? !7% G C1ec3ing @ named Aueries
>6a5a? terminado la iniciali<acion de 9ibernate
>6a5a? 9ibernate; select libro@L.uid as uid* libro@L.titulo as titulo@L*
libro@L.autor as autor@L 4rom LK#% libro@L
>6a5a? !7% G cleaning up connection pool;
6dbc;derby;build/derby/1ibernate+create=true
>6a5a? 8'#! G S2L 8arning; ,@@@@* S2LState; @,M@,
>6a5a? 8'#! G Database Fbuild/derby/1ibernateF not created* connection made
to e/isting database instead.
>6a5a? Libro; $utorial* 'utor; ngS8
K(LD S(CC"SS7(L
$otal time; : seconds
Creando aplicaciones con Hibernate
&
Hasta este momento +emos creado una aplicacin sencilla empleando Hibernate; pero +asta a+ora no
+emos entrado en detalles de como estFn estructurados los arc+i&os de mapeo de Hibernate; en esta
seccin &amos a detallar estos arc+i&os ! de <ue manera podemos +acer <ue dos o mas tablas
interactIen.
- Los datos tomados en esta seccin estFn basados en el capitulo 6 del libro *ro Hibernate 4 <ue se encuentra en booBs.42#
Elabor: Ismael Nuez
Tutorial de Hibernate
nato!'a de los archivo de !apeo
Tipos de datos soportados por Hibernate
Tipo de dato de Hibernate Equivalencia a tipo de datos
Java
int int; /a&a.lan(.Inte(er
s+ort s+ort; /a&a.lan(.S+ort
lon( lon(; /a&a.lan(.Lon(
'loat 'loat; /a&a.lan(.Oloat
double double; /a&a.lan(.ouble
c+aracter c+ar; /a&a.lan(.$+aracter
b!te b!te; /a&a.lan(.)!te
boolean boolean; /a&a.lan(;)oolean
strin( /a&a.lan(.Stirn(
date; time /a&a.util.ate
calendar /a&a.util.$alendar
bi(Gdecimal /a&a.mat+.)i(ecimal
bi(Ginte(er /a&a.mat+.)i(Inte(er
locale /a&a.util.Locale
timezone /a&a.util.TimePone
currenc! /a&a.util.$urrenc!
class /a&a.lan(.$lass
binar! b!teQR
te2t /a&a.lan(.Strin(
serializable /a&a.io.Serializable
clob /a&a.s<l.$lob
blob /a&a.s<l.)lob
8abla 1: 8ipos de datos en %ibernate
Atributos del elemento 'hibernate(mapping)
Este es el elemento central ! permite establecer los comportamientos a los demFs elementos
Elabor: Ismael Nuez
Tutorial de Hibernate
Atributo Valores Default Descripcin
auto7import true;'alse true *ermite usar nombres de clases no cuali'icados en los <ueries de Hibernate.
catalo( El catalo(o de la base de datos al cual se aplican los <ueries
de'ault7access propert! Tipo de acceso a los datos de la clase; puesto en propert! se utilizan los
m@todos de (et ! set con el &alor asi(nado a name del elemento propert!
de'ault7cascade none e'ine como los cambios en el ob/eto a'ectan a los ob/etos relacionados con
el.
de'ault7laz! true;'alse true e'ine si la instanciacin perezosa es utilizada por de'ault
pacBa(e El pacBa(e de donde se +acen los import de las clases
sc+ema El es<uema de la base de datos en donde se aplican los <ueries
8abla 2: 8a$ %ibernate 5appin$
Atributos del elemento 'class)
En este elemento se describe la relacin entre el ob/eto %a&a ! la base de datos.
Elabor: Ismael Nuez
Tutorial de Hibernate
Atributo Valores Default Descripcin
abstract true; 'alse 'alse Este atributo solo debe tener el &alor true si la clase es abstracta
batc+7size - El numero de ob/etos <ue pueden ser obtenidos con el mismo id de la clase.
catalo( Sa descrito en Tabla .
c+ecB SQL para crear una sentencia multiroA c+ecB para (enerar un es<uema
discriminator7
&alue
null; not7null Ealor usado para distin(uir entre subclases id@nticas de un tipo persistente
comIn.
d!namic7insert true; 'alse 'alse Si es true; columnas nulas aparecerFn al e/ecutar un comando INSE9T cuando
no +a colocado un &alor por de'ault.
d!namic7update true; 'alse 'alse Si es true; columnas sin cambios aparecerFn al e/ecutar un comando C*"TE
entit!7name Nombre <ue se usara en lu(ar del nombre de clase.
laz! true; 'alse Se utiliza para +abilitar ! des+abilitar el car(ado perezoso.
mutable true; 'alse true Indica si la clase es mutable
name El nombre completo de la clase <ue se +arF persistir.
optimistic7locB none;
&ersion;
dirt!; all
&ersion Especi'ica la estrate(ia de optimistic locB <ue sera usada.
persister *ermite <ue un ob/eto $lass*ersister sea usado al +acer persistir esta clase.
pol!morp+ism implicit;
e2plicit
implicit etermina el tipo de polimor'ismo <ue sera usado; el polimor'ismo impl5cito
permite re(resar instancias de la clase cuando la superclase sea utilizada en el
<uer!
pro2! Especi'ica una clase o inter'ace <ue sera utilizada como pro2! para la
inicializacin perezosa.
roAid Indica <ue identi'icador de columna debe ser usado
sc+ema Sa descrito en Tabla .
Elabor: Ismael Nuez
Tutorial de Hibernate
Atributo Valores Default Descripcin
select7be'ore7
update
true; 'alse 'alse Si es true; Hibernate realiza un SELE$T antes de un C*"TE para ase(urarse
<ue la actualizacin es necesaria.
table El nombre de la tabla asociada con la clase.
A+ere $ondicin de la sentencia SQL JHE9E <ue sera usada al recuperar ob/etos.
8abla 3: 8a$ Class
Atributos del elemento 'id)
Este elemento permite de'inir la lla&e primaria de la tabla; este es un elemento obli(atorio
Atributo Valor Default Descripcin
access Indica como se debe acceder a las propiedades; si es puesto en 'ield; se accede
directamente a los atributos de la clase; si es propert! se accede por los m@todos de (et
! set.
Se puede especi'icar una clase de tipo *ropert!"ccesor para de'inir otros tipos de
acceso
column El nombre de la columna <ue ser&irF de lla&e primaria.
len(t+ El tamao de la columna.
name El nombre del atributo de la clase <ue representa la lla&e primaria
t!pe "l(In tipo de dato soportado por Hibernate.
unsa&ed7
&alue
El &alor <ue el atributo debe tomar cuando una instancia de la clase +a sido creado. Es
obli(atorio.
8abla 4: 8a$ Id
tributos del ele!ento (generator)
"l establecer una lla&e primaria se debe especi'icar la 'orma en <ue esta se (enera; Hibernate tiene
implementadas &arias 'ormas de (enerar la lla&e primaria; pero no todas las 'ormas son portables a
todos los mane/adores de bases de datos.
Elabor: Ismael Nuez
Tutorial de Hibernate
En la Tabla : se muestran los 'ormas en <ue Hibernate (enera lla&es primarias ! si son portables o no.
Nombre Descripcin
(uid Tenera un identi'icador (lobalmente Inico; no es portable.
+ilo Tenera identi'icadores Inicos empleando una tabla ! una columna de la base de datos; es portable.
identit! Soporta el tipo de columna identit! proporcionado por al(unos mane/adores de bases de datos
increment Tenera lla&es <ue empiezan en - ! <ue se &an incrementando en - cada &ez <ue se a(re(a un nue&o re(istro
a la base de datos; puede ser aplicado a los tipos int; s+ort ! lon(. Es portable
nati&e Selecciona entre se<uence; identit! e +ilo como la 'orma de (enerar la lla&e primaria.
se<uence Soporta el tipo se<uence proporcionado por al(unos mane/adores de bases de datos.
uuid La lla&e se compone de la direccin I* local; la +ora de %E0; lo +ora del sistema ! un &alor continuo; no
(arantiza <ue la lla&e primaria sea Inica.
8abla -: 8a$ =enerator
Atributos del elemento 'propert$)
Esta propiedad permite especi'icar los atributos de la clase <ue no se relacionan con otras clases del
modelo de dominio.
Elabor: Ismael Nuez
Tutorial de Hibernate
Atributo Valor Default Descripcin
access Sa descrito en Tabla 4
column El nombre de la columna <ue almacenara el &alor del atributo; por de'ault el nombre
de la columna es el nombre del atributo.
'ormula Cn <uer! SQL <ue representa una propiedad calculada dinamicamente.
inde2 El nombre de un inde2 relacionado con esta columna.
insert true; 'alse true Especi'ica si en la creacin de una instancia de la clase el atributo relacionado con
esta propiedad debe ser almacenado.
laz! true; 'alse 'alse Sa descrito en Tabla 4
len(t+ Lon(itud de la columna.
name Nombre del atributo en la clase <ue debe empezar con minIscula; este atributo es
obli(atorio.
not7null true; 'alse 'alse Especi'ica si se puede almacenar un &alor nulo.
optimistic7
locB
true; 'alse true Sa descrito en Tabla 4
precision *ermite especi'icar la presicin del dato num@rico.
scale *ermite especi'icar la escala del dato num@rico.
t!pe "l(In tipo de dato soportado por Hibernate.
uni<ue true; 'alse 'alse Indica si &alores duplicados son permitidos.
update true; 'alse true Especi'ica si en la actualizacin del atributo de la clase esta columna tambi@n es
modi'icada.
8abla .: 8a$ !roperty
*elaciones entre tablas
$omo mencionamos antes las aplicaciones de la &ida real no estFn descritas por tablas independientes;
Elabor: Ismael Nuez
Tutorial de Hibernate
sino por tablas <ue interactIen entre si; el problema a+ora es como +acemos <ue Hibernate mane/e
estas relaciones entre las tablas.
Hasta donde nosotros sabemos la interaccin entre tablas se +ace colocando una lla&e 'orFnea en la
tabla <ue deseamos <ue interactIe con otra; esta lla&e 'orFnea corresponde a la lla&e primaria de la otra
tabla; sabemos tambi@n; <ue la interaccin entre tablas debe tener una cardinalidad ! <ue nosotros
debemos mane/ar esta cardinalidad >en una relacin n a n; nosotros debemos de'inir el indice <ue
administra la relacin?.
En Hibernate la adminstracin de las relaciones entre tablas es mas sencilla !a <ue tiene elementos <ue
ademas de de'inir un atributo como lla&e 'orFnea le asi(nan la cardinalidad de la relacin; estos
elementos son descritos en las si(uientes secciones con los atributos <ue pueden tener.
Atributos del elemento 'one(to(one)
Esta relacin e2presa <ue el atributo de la clase esta relacionado con un solo atributo de otra.
Elabor: Ismael Nuez
Tutorial de Hibernate
Atributo Valor Default Descripcin
access Sa descrito en Tabla 4
batc+7size Sa descrito en Tabla 4
cascade etermina como los cambios en la entidad padre a'ectan a los ob/etos
relacionados.
catalo( Sa descrito en Tabla .
c+ecB Sa descrito en Tabla 4
'etc+ /oin; select;
subselect
El modo con el <ue el elemento sera recuperado
in&erse true; 'alse 'alse Especi'ica si la relacin es bidireccional
laz! true; 'alse Sa descrito en Tabla 4
name Le asi(na un nombre a la entidad >re<uerido en caso de <ue el mapa sea
dinFmico?.
optimistic7locB true; 'alse true Sa descrito en Tabla 4
outer7/oin true; 'alse;
auto
Especi'ica si un outer7/oin sera usado
persister Especi'ica <ue $lass*ersister sera usado para sobreescribir el <ue se encuentra
de'inido por de'ault
sc+ema Sa descrito en Tabla .
table El nombre de la tabla con la <ue esta asociado este atributo.
A+ere Sa descrito en Tabla 4
8abla /: 8a$ one>to>one
Atributos del elemento 'one(to(man$)
Especi'ica <ue un atributo de la clase esta relacionado con 3 o muc+os elementos de otra clase
Elabor: Ismael Nuez
Tutorial de Hibernate
Atributo Valor Default Descripcin
access Sa descrito en Tabla 4
cascade Sa descrito en Tabla #
class El tipo del atributo; es decir; el nombre de la clase a la <ue se +ace re'erencia.
column El nombre <ue tendrF la columna <ue almacenara al atributo
entit!7name El nombre de la entidad asociada al atributo.
'etc+ /oin; select Sa descrito en Tabla #
'orei(n7Be! El nombre de la lla&e 'orFnea (enerada por esta asociacin. *or de'ault
Hibernate asi(na un nombre
inde2 Indica el orden de la entidades cuando sean recuradas por la tabla in&ersa.
insert true; 'alse true *uesto en 'alse; si al atributo !a tiene un &alor asi(nado ad&ierte cuando se
intente cambiar.
laz! true; 'alse 'alse Sa descrito en Tabla 4
name El nombre del atributo en la clase.
not7'ound e2ception;
i(nore
e2ception El comportamiento <ue se toma cuando la entidad no e2iste
not7null true; 'alse 'alse Especi'ica si se permiten &alores nulos
optimistic7
locB
true; 'alse true Sa descrito en Tabla 4
outer7/oin true; 'alse;
auto
Sa descrito en Tabla #
propert!7re' Si en la relacin no se utiliza la lla&e primaria; este atributo se utiliza para
indicar con <ue propiedad se tiene la relacin.
uni<ue true; 'alse 'alse Especi'ica si se permiten identi'icadores duplicados
Elabor: Ismael Nuez
Tutorial de Hibernate
Atributo Valor Default Descripcin
update true; 'alse true Sa descrito en Tabla 6
8abla 0: 8a$ one>to>;any
Atributos del elemento 'man$(to(man$)
Especi'ica <ue un atributo de la clase tiene una relacin de muc+os a muc+os con un atributo de otra
clase.
Atributo Valor Default Descripcin
column El nombre <ue tendrF la columna <ue almacenara al atributo
class El tipo del atributo; es decir; el nombre de la clase a la <ue se +ace re'erencia.
outer7/oin true; 'alse; auto Sa descrito en Tabla #
8abla 1: 8a$ ;any>to>;any
Es comIn <ue los atributos <ue estFn relacionados con otros atributos de otras clases est@n
almacenados en colecciones de datos; por e/emplo:
public class Prestamo{
pri5ate SetD(suarioI listaDeudores = ne= 9as1SetD(suarioI()+
// mXtodos de get y set
0
Hibernate proporciona soporte para poder +acer persistir a estos elementos ! +acer mas 'Fcil su
manipulacin.
En la si(uiente seccin mostraremos las colecciones <ue soporta Hibernate; como se describen en el
arc+i&o de mapeo ! como podemos traba/ar con ellas.
Atributos comunes de los elementos de coleccin
Los ob/etos de coleccin tienen &arios atributos en comIn; para no estar repitiendo la in'ormacin la
Tabla -3 muestra la in'ormacin comIn a los ob/etos de coleccin soportados por Hibernate.
Elabor: Ismael Nuez
Tutorial de Hibernate
Atributo Valor Default Descripcin
access Sa descrito en Tabla 4
batc+7size Sa descrito en Tabla 4
cascade Sa descrito en Tabla #
catalo( Sa descrito en Tabla .
c+ecB Sa descrito en Tabla 4
'etc+ /oin; select;
subselect
Sa descrito en Tabla #
laz! true; 'alse Sa descrito en Tabla 4
name El nombre <ue tiene el atributo en la clase; debe empezar con minIscula
optimistic7locB true; 'alse true Sa descrito en Tabla 4
outer7/oin true; 'alse;
auto
Sa descrito en Tabla #
persister Sa descrito en Tabla #
sc+ema Sa descrito en Tabla .
table El nombre de la tabla asociada con este atributo.
A+ere Sa descrito en Tabla 4
8abla 14: (tributos de los ele;entos de coleccin
tributos del ele!ento (set)
Este ob/eto es el e<ui&alente a la inter'az /a&a.util.Set; como en este ob/eto no se permiten ob/etos
id@nticos; por lo <ue se recomienda sobrecar(ar los m@todos de eAuals ! 1as1Code* para determinar
<ue es un ob/eto id@ntico <ue es un ob/eto i(ual.
Elabor: Ismael Nuez
Tutorial de Hibernate
Atributo Valor Default Descripcin
in&erse true; 'alse 'alse Sa descrito en Tabla #
order7b! Especi'ica un criterio SQL para ordenar a los atributos cuando se recuperan de la base
de datos.
sort Especi'ica la clase $ollection <ue sera usada; puede tomar los &alores de unsorter;
natural o cual<uier otra clase $omparator.
8abla 11: 8a$ Set
E/emplo del uso de un elemento Set en una relacin unidireccional de muc+os a muc+os sin ob/etos
replicados:
Supon(amos <ue estamos mapeando la si(uiente relacin:
Nota: $abe mencionar <ue esto es solo un e/emplo ! <ue por comodidad se obli(o a <ue sea
unidireccional.
En la clase (suario e2iste el atributo:
pri5ate SetDLibroI librosPrestados = ne= 9as1SetDLibroI()+
En el arc+i&o Csuario.+bm.2ml debe a(re(arse el si(uiente ta(:
Dset name=YlibrosPrestadosY table=YPrestamoY la<y=Y4alseYI
D3ey column=Yid(suarioY/I
DmanyGtoGmany class=Ym/.uam.ayd.biblioteca.LibroY column=YidLibroY/I
D/setI
En el ta( Set se especi'ica el nombre del atributo en la clase >name?; la tabla <ue se asocia como indice
de la relacin >table?; !a <ue en las relaciones de muc+os a muc+os es necesario contar con uno; ! si los
ob/etos estFn en memoria o no >laz!?.
En el ta( Ue! se especi'ica la columna <ue se usa como lla&e primaria en la tabla.
En el ta( man!7to7man! se espaci'ica con <ue clase se relaciona ! <ue columna usa como lla&e
primaria.
Elabor: Ismael Nuez
Ilustracin 14: Eje;plo de uso de Set
Libro
-idLibro
Usuario
-idUsuario 1..* 1..*
Tutorial de Hibernate
tributos del ele!ento (list)
Es el e<ui&alente a la inter'az /a&a.util.List; este ob/eto permite ob/etos replicados.
Atributo Valor Default Descripcin
in&erse true; 'alse 'alse Sa descrito en Tabla #
8abla 12: 8a$ List
E/emplo del uso del elemento List en una relacin unidireccional de muc+os a muc+os permitiendo
ob/etos replicados en la asociacin:
Tomando el mismo e/emplo ilustrado en Ilustracin -4; &amos a suponer <ue a+ora e2iste un atributo
de tipo List en la clase (suario:
pri5ate ListDLibroI librosPrestados = ne= 'rrayListDLibroI()+
En el arc+i&o Csuario.+bm.2ml debe a(re(arse el si(uiente ta(:
Dlist name=YlibrosPrestadosY table=YPrestamoY la<y=Y4alseYI
D3ey column=Yid(suarioY/I
DmanyGtoGmany class=Ym/.uam.ayd.biblioteca.LibroY column=YidLibroY/I
D/listI
"l parecer no e2iste di'erencia entre Set ! List; la di'erencia consiste en el conte2to de la aplicacin !
en <ue Hibernate no soporta <ue en relaciones bidireccionales en el lado de la relacin <ue tiene
cardinalidad muc+os <ue se utilicen listas; mapas o arre(los.
.
tributos del ele!ento (idbag)
Atributo Valor Default Descripcin
order7b! Sa descrito en Tabla --
8abla 13: 8a$ Ida$
tributos del ele!ento (!ap)
Es el e<ui&alente a la inter'az /a&a.util.0ap.
. *ara mas in'ormacin consultar la pa(ina +ttp:DDAAA.+ibernate.or(D+ibGdocsDre'erenceDenD+tmlDcollections.+tml
Elabor: Ismael Nuez
Tutorial de Hibernate
Atributo Valor Default Descripcin
in&erse true; 'alse 'alse Sa descrito en Tabla #
order7b! Sa descrito en Tabla --
sort Sa descrito en Tabla --
8abla 14: 8a$ 5ap
tributos del ele!ento (bag)
Atributo Valor Default Descripcin
in&erse true; 'alse 'alse Sa descrito en Tabla #
order7b! Sa descrito en Tabla --
8abla 1-: 8a$ a$
*elaciones bidireccionales
"s5 como es comIn <ue interactIen . tablas; tambi@n lo es <ue se pueda na&e(ar en ambos sentidos de
la relacin; en esta seccin &amos a tratar este problema para mostrar como se mapean estas
&isibilidades empleando Hibernate.
Ha! <ue mencionar <ue Hibernate soporta . tipos de asociaciones bidireccionales
one7to7man!
man!7to7man!
por lo <ue en las . si(uientes secciones &amos a tratar la 'orma en <ue se mane/an estas relaciones por
medio de un e/emplo ! &amos a omitir la descripcin de los atributos de cada relacin.
*elaciones del tipo 'one(to(man$)
Supon(amos el si(uiente e/emplo:
Elabor: Ismael Nuez
Ilustracin 1-: Eje;plo de relacin bidireccional one>to>;any
Padre
-idPadre
Hijo
-idHijo
..* 1
Tutorial de Hibernate
En esta relacin un ob/eto *adre puede tener de 3 a muc+os Hi/os ! los Hi/os estFn interesados en
conocer a su respecti&o *adre.
"rc+i&o *adre.+bm.2ml:
D1ibernateGmappingI
Dclass name=Ypac3age.PadreY table=YPadreYI
Did name=YidPadreY type=YintYI
Dgenerator class=YincrementY/I
D/idI
DBGG %tros atributos del Padre GGI
Dset name=Y1i6osY in5erse=YtrueY la<y=Y4alseYI
D3ey column=YidPadreY/I
DoneGtoGmany class=Ypac3age.9i6oY/I
D/setI
D/classI
D/1ibernateGmappingI
"rc+i&o Hi/o.+bm.2ml:
D1ibernateGmappingI
Dclass name=Ypac3age.9i6oY table=Y9i6oYI
Did name=Yid9i6oY type=YintYI
Dgenerator class=YincrementY/I
D/idI
DBGG %tros atributos del 9i6o GGI
DmanyGtoGone name=YpadreY class=Ypac3age.PadreY column=YidPadreY/I
D/classI
D/1ibernateGmappingI
Las cosas <ue cabe +acer notar es <ue el padre tiene un atributo:
pri5ate SetD9i6oI 1i6os = ne= 9as1SetD9i6oI()+
<ue el Hi/o tiene un atributo:
pri5ate Padre padre+
! <ue en el caso del *adre la relacin &a como one7to7man! con in&erse N true ! <ue esta relacin se
in&ierte en el Hi/o a man!7to7one >el +ec+o de <ue la relacin se in&ierta de esta 'orma no tiene nda <ue
&er con <ue in&erse sea i(ual a true?.
*elaciones del tipo 'man$(to(man$)
Supon(amos a+ora la si(uiente relacin:
Elabor: Ismael Nuez
Tutorial de Hibernate
En esta relacin un ob/eto *adre tiene de 3 a muc+os Hi/os; ! los Hi/os tienen al menos un *adre
>idealmente solo .?.
"rc+i&o *adre.+bm.2ml:
D1ibernateGmappingI
Dclass name="pac3age.Padre"I
Did name=YidPadreY type=YintYI
Dgenerator class=YincrementY/I
D/idI
DBGG %tros atributos del Padre GGI
Dset name="1i6os" table="9i6os" in5erse="true" la<y="4alse"I
D3ey column="idPadre"/I
DmanyGtoGmany class="pac3age.9i6o" column="id9i6o"/I
D/setI
D/classI
D/1ibernateGmappingI
"rc+i&o Hi/o.+bm.2ml:
D1ibernateGmappingI
Dclass name="pac3age.9i6o"I
Did name=Yid9i6oY type=YintYI
Dgenerator class=YincrementY/I
D/idI
DBGG %tros atributos del 9i6o GGI
Dset name="padres" table="9i6os" la<y="4alse"I
D3ey column="id9i6o"/I
DmanyGtoGmany class="pac3age.Padre" column="idPadre"/I
D/setI
D/classI
D/1ibernateGmappingI
Las cosas <ue cabe +acer notar es <ue a+ora el Hi/o tiene un atributo:
Elabor: Ismael Nuez
Ilustracin 1.: Eje;plo relacin bidireccional ;uc"os a
;uc"os
Padre
-idPadre
Hijo
-idHijo
..* 1..*
Tutorial de Hibernate
pri5ate SetDPadreI padres = ne= 9as1SetDPadreI()+
! <ue en ambos casos los identi'icadores de cada clase se encuentran en una misma tabla >Hi/os? <ue
Hibernate utiliza ! administra como indice.
+apeo de clases y sus relaciones
Hasta el momento +emos realizado mapeos de ob/etos a tablas relacionales empleando relaciones de
asociacin entre los ob/etos; pero en al(unas ocasiones <uisi@ramos mapear otros tipos de relaciones
entre ob/etos. os de la asociaciones mas empleadas en orientacin a ob/etos son la composicin ! la
+erencia; Hibernate permite realizar el mapeo de estas relaciones de 'orma mu! sencilla.
En las si(uientes . secciones emplearemos e/emplos para ilustrar la 'orma en <ue se puede realizar el
mapeo de relaciones de composicin ! +erencia empleando Hibernate.
Mapeo de la relacin de composicin
En la Ilustracin -# se muestra una relacin en la <ue una *ersona esta compuesta de un Nombre
El arc+i&o *ersona.+bm.2ml:
D1ibernateGmappingI
Dclass name=Ypac3age.Persona" table="Persona"I
Did name="idPersona" type="string"I
Dgenerator class="assigned"/I
D/idI
DBGG %tros atributos de Persona GGI
Dcomponent name="nombre" class="pac3age.!ame"I
DBGG Propiedades de la clase !ombre GGI
D/componentI
D/classI
D/1ibernateGmappingI
En esta relacin el ob/eto de tipo Nombre es (uardado como un &alor no como una entidad; por lo <ue
en la clase no es necesario de'inir un identi'icador; pero en la clase *ersona se deben de'inir los (etters
! setters para el ob/eto de tipo Nombre.
El ta( component puede tener los atributos de cual<uier otro elemento ! ademas de'ine un subelemento
llamado 6parent8 <ue permite de'inir una asociacin con el ob/eto <ue lo contiene. *or e/emplo:
Elabor: Ismael Nuez
Ilustracin 1/: Eje;plo de relacin de co;posicin
Persona
-idPersona
-no!bre: "o!bre
Nombre
1 1
Tutorial de Hibernate
en este caso el arc+i&o de *ersona.+bm.2ml <ueda:
D1ibernateGmappingI
Dclass name=Ypac3age.Persona" table="Persona"I
Did name="idPersona" type="string"I
Dgenerator class="assigned"/I
D/idI
DBGG %tros atributos de Persona GGI
Dcomponent name="nombre" class="pac3age.!ame"I
Dparent name="persona!ombrada"/I
DBGG Propiedades de la clase !ombre GGI
D/componentI
D/classI
D/1ibernateGmappingI
$on esto permitimos <ue desde el ob/eto de tipo Nombre se pueda tener &isibilidad con un ob/eto de
tipo *ersona.
Mapeo de la relacin de herencia
La Ilustracin -, muestra una relacin de +erencia entre 4 clases:
Elabor: Ismael Nuez
Ilustracin 11: Eje;plo de relacin de
%erencia
Ilustracin 10: Eje;plo de relacin de co;posicin bidireccional
Persona
-idPersona
-no!bre: "o!bre
Nombre
-#ersona"o!brada: Persona
1 1
Empleado
-id$!#leado
-no!bre
Secretaria Administrador
Tutorial de Hibernate
Hibernate soporta 4 'ormas de mapear este tipo de asociaciones <ue describiremos a continuacin.
1. Una tabla por clase concreta
Se mapea cada clase de la relacin de +erencia como una clase concreta normal; en cada clase se
mapean todos los atributos inclu!endo los <ue son +eredados. En esta 'iloso'5a de mapeado no se
mapean inter'aces ni clases abstractas.
es&enta/as:
En las subclases se tienen datos replicados; es decir; <ue por cada subclase de la relacin se
deben repetir los datos <ue son +eredados.
Los cambios en la superclase a'ectan a muc+as tablas.
Eje;plo de co;o se ;apear?a la clase Secretaria con esta estrate$ia
"rc+i&o Secretaria.+bm.2ml:
D1ibernateGmappingI
Dclass name=Ypac3age.SecretariaY table=YSecretariaYI
DBGG "l identi4icador y el nombre son los atributos Aue
1ereda de "mpleado GGI
Did name=YidY type=YintYI
Dgenerator class=YincrementYI
D/idI
Dproperty name=YnombreY tupe=YstringY/I
DBGG %tros atributos de Secretaria GGI
D/classI
D/1ibernateGmappingI
2. Una tabla por subclase
Se mapea cada clase en la relacin inclu!endo clases abstractas e inter'aces. La relacin @es unA de la
+erencia se con&ierte en una relacin @tiene unA en el es<uema de la base de datos.
Elabor: Ismael Nuez
Ilustracin 24: EsBue;a de la base de datos
Empleado
%%table&&
-id$!#leado
-no!bre
Secretaria
%%table&&
Administrador
%%table&&
Tutorial de Hibernate
Eenta/as:
Es conceptualmente mas 'Fcil de comprender
No re<uiere de cambios comple/os en la base de datos cuando se modi'ica a la superclase
es&enta/as:
*uede resultar en un pobre desempeo de la aplicacin si la ar<uitectura del sistema esta mal
planteada.
Eje;plo de ;apeo de la clase (d;inistrador e;pleando esta estrate$ia
"rc+i&o "dministrador.+bm.2ml:
D1ibernateGmappingI
D6oinedGsubclass name=Ypac3age.'dministradorY e/tends=Ypac3age."mpleadoYI
DBGG denti4icador de la clase "mpleado GGI
D3ey column=Yid"mpleadoYI
DBGG Lista de los atributos de la clase 'dministrador GGI
D/6oinedGsubclassI
D/1ibernateGmappingI
En esta ocasin sustituimos el ta( class por el /oined7subclass para establecer una relacin directa con
la superclase; en este ta( especi'icamos cual es la clase <ue e2tiende ! con el ta( Be! +acemos
re'erencia a los elementos de la superclase <ue no +an sido a(re(ados en este arc+i&o; es decir; no es
necesario rede'inir los elementos de idEmpleado ! nombre.
El ta( /oined7subclass no puede contener ta(s de subclass ! &ice&ersa.
Elabor: Ismael Nuez
Ilustracin 21: Con'ersin de la relacin a
Ctiene unC
Empleado
%%table&&
-id$!#leado
-no!bre
Secretaria
%%table&&
Administrador
%%table&&
Tutorial de Hibernate
3. Una tabla por jerarqua de la clase.
Esta estrate(ia ponemos en una sola tabla a todos los atributos <ue e2istan en la relacin de +erencia; es
decir; realizamos una lista con todos los atributos de todas la clases de la relacin de +erencia ! los
mapeamos todos en una sola tabla.
" esta tabla le a(re(amos un elemento discriminador para distin(uir el tipo base representado por cada
'ila en la tabla.
Eenta/as:
='rece un me/or desempeo !a <ue los <ueries se realizan en una misma tabla ! se puede
recuperar el ob/eto mas 'Fcilmente.
Los cambios en los atributo solo re<uieren del cambio de una columna.
es&enta/as:
No es una buena representacin de los atributos en las clases.
Si el numero de subclases crece tambi@n lo +ace el numero de columnas.
$ada subclase debe de'inir la clase <ue e2tiende ! su elemento discriminador.
Eje;plo de co;o se reali3a el ;apeo con esta estrate$ia
"rc+i&o Empleado.+bm.2ml:
D1ibernateGmappingI
Dclass name="pac3age."mpleado" table=""mpleado"I
DBGG denti4icador de la superclase GGI
Did name="id"mpleado" type="int"I
Dgenerator class="increment"/I
D/idI
DBGG Columna Aue sir5e como discriminador del tipo de subclase GGI
Ddiscriminator column="tipo"mpleado" type="string"/I
DBGG Lista de los atributos de la clase "mpleado GGI
Elabor: Ismael Nuez
Ilustracin 22: EsBue;a de la
base de datos con la
estrate$ia de una tabla por
jerarBu?a
Empleado
%%table&&
-id$!#leado
-no!bre
-atributos'eSe(retria
-atributos'eAd!inistrador
Tutorial de Hibernate
DBGG De4inicion de la subclase Secretaria GGI
Dsubclass name="pac3age.Secretaria" discriminatorG5alue="S"C#""I
DBGG Lista de los atributos de la clase Secretaia GGI
D/subclassI
DBGG De4inicion de la subclase 'dministrador GGI
Dsubclass name="pac3age.'dministrador" discriminatorG5alue="'DM!"I
DBGG Lista de los atributos de la clase 'dministrador GGI
D/subclassI
D/classI
D/1ibernateGmappingI
Elabor: Ismael Nuez
Tutorial de Hibernate
*eferencias
En ingles
*ro Hibernate 4. %e'' LinAood ! a&e 0inter. >Este libro se encuentra en booBs.42#?.
+ttp:DDAAA.+ibernate.or(D+ibGdocsDre'erenceDenD+tmlDinde2.+tml . >ocumentacin de
Hibernate; esta disponible en otros idiomas menos en espaol?.
+ttp:DDanon+ibernate.labs./boss.comDtrunBDsandbo2D/dbcDsrcDtestDresourcesD+ibernate.properties .
>a una lista de propiedades para con'i(urar Hibernate con cual<uiera de los 0ane/adores de
)ases de atos <ue conoce?.
+ttp:DDAAA.+ibernate.or(D--6.+tmlV"1 . >O"Q del sitio de Hibernate?
En espa,ol
+ttp:DDAAA./a&a+ispano.or(Darticles.article.actionWidN,4 . >"rticulo de Orancsec 9oses "lbiol
sobre Hibernate?.
+ttp:DDAAA.pro(ramacion.comD/a&aDtutorialD+ibernateD . >Tutorial para aprender a mane/ar
Hibernate?.
+ttp:DDAAA.pro(ramacion.comD/a&aDarticuloD/apGpersisG+ibD . >Eersin en espaol del articulo
publicado por %e'' Hanson; trata de la persistencia de ob/etos %a&a con Hibernate?.
+ttp:DDAAA./a&a+ispano.or(Darticles.article.actionWidN,: . >"rticulo de 0art5n *@rez 0ariFn;
<ue trata sobre mane/o de cac+es ! concurrencia con Hibernate?.
+ttp:DDAAA.epidataconsultin(.comDtiBiAiBiDtiBi7
pa(e+istor!.p+pWpa(eNHibernateXdi''.N.-Xdi''Gst!leNside&ieAX*H*SESSIN1abd,1-1a'-6
3#b3'#d'4a16#64d4,b#. >Trata sobre problemas de mapeo recursi&o de ob/etos?.
Elabor: Ismael Nuez

También podría gustarte