Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Aplicaciones Distribuidas
Contenido
Introduccin.
ORM
Hibernate.
HQL.
Arquitectura.
Configuracin.
Mapping.
Ciclo de Vida.
Cach.
Conclusiones.
2
Introduccin
Motivacin:
Dos paradigmas diferentes : programacin orientada a
objetos y bases de datos relacionales
GAP Objeto-Relacional
3
Ej: Para hacer los objetos persistentes se requiere una
conexin JDBC, crear una sentencia SQL y copiar todos
los valores de las propiedades sobre un
PreparedStatement o en una cadena SQL. Y las
asociaciones? Y si el objeto contiene a su vez a otros
objetos? Y las claves ajenas?
4
Granuralidad: Atributos no primitivos se mapean en una
columna.Ejemplo direccion.
5
6
ORM
Carctersticas:
Un ORM cubre el GAP objeto-relacional
8
Elementos de un ORM:
Optimizaciones
9
Beneficios:
Productividad: Ahorra mucho trabajo engorroso y
repetitivo.
11
Carctersticas:
No intrusivo (estilo POJO)
12
HQL
Es solo consulta.
Ejemplo:
from Bid
select B.BID_ID, B.AMOUNT, B.ITEM_ID, B.CREATED from BID B
13
Conceptos Bsicos
Comunicacin con el motor de Hibernate mediante Session
Se requiere una instancia de session para cada tipo de
BD
Permite delimitar una o varias operaciones relacionadas
dentro de un proceso de negocio, demarcar una transaccin
y otros servicios (cach de objetos,)
save(Object object), createQuery(String queryString),
beginTransaction(), etc
Una session hace de cache de objetos cargados
Objetos tipo transient y tipo persistent.
Transient: objetos que slo existen en memoria y no en
un almacn de datos.
Persistent: objetos ya almacenados y por tanto
persistentes
14
Necesidad de crear y cerrar explcitamente las sesiones de
Hibernate
Una sesin siempre va a pertenecer a un mismo thread de
ejecucin (el que pertenece a la ejecucin de un mtodo de
negocio para un usuario concreto )
Tcnicamente se pueden compartir sesiones entre threads
(no aconsejable)
15
SessionFactory para crear instancias de
sesiones y realizar operaciones comunes a los
diferentes threads: gestin de una cach
compartida entre threads, etc
openSession(), evict(Class persistentClass),
Qu sucede si en un entorno de mltiples hilos
se accede a un mismo objeto desde dos sesiones
diferentes?
Una instancia de un objeto persistente no es
compartida por dos sesiones (dos instancias dentro
de la misma mquina virtual Java para un mismo
objeto de datos)
16
Configuration
define la
configuracin
(ficheros de mapeo)
y arranca
Hibernate.
17
Arquitectura
El API de Hibernate es una arquitectura de dos
capas (Capa de persistencia y Capa de Negocio).
18
Interfaces usadas en la programacion:
Session
Transaction: Abstraccin de una transaccin concreta
(JDBC,JTA, CORBA). Su uso es opcional
Query: Realiza peticiones a la base de datos y controla
cmo se ejecuta dicha peticin. HQL o en SQL nativo.
Enlaza los parmetros de la peticin, limita el numero de
resultados devueltos y ejecuta la consulta.
Criteria: Para crear y ejecutar consultas OO (parecido a
Query).
20
Elegir y configurar una conexin
21
Ejemplo
SessionFactory sessions = new
Configuration().configure().buildSessionFactory();
...
Transaction tx = session.beginTransaction();
session.save(user);
tx.commit();
session.close();
22
POJO / JavaBeans:
No es necesario que las clases implementen
la interfaz Serializable.
24
Tambin se pueden aadir atributos como not-null
para establecer si puede ser atributo nulo, o una
formula para indicar como calcular el valor de un
atributo derivado. Ej.:
<property name="totalIncludingTax"
formula="TOTAL + TAX_RATE * TOTAL"
type="big_decimal"/>
25
Se puede asociar la clave primaria de una tabla a un
atributo de la clase:
<id column="CATEGORY_ID">
26
Hibernate soporta modelos de granulo fino, esto significa que
varias clases pueden mapearse a una tabla, una fila representa
varios objetos.
Por ejemplo: Una tabla Usuario con la informacin de la direccin
personal, direccin fiscal y email se mapea a las clases Address y
Email.
<class name=User table=USER>
</component>
27
La gestin de las asociaciones entre clases y relaciones entre
tablas es una las tareas cruciales en un ORM.
28
Ciclo de Vida
Los objetos
para Hibernate
tienen los
estados:
Transient
Persistent
Detached.
29
Los objetos instanciados con new no son persistentes
inmediatamente, sino que estn en estado transitorio.
no estn en ninguna fila de la tabla y sern perdidos si el objeto se
desreferencia.
Estos objetos son no transaccionales.
30
Programacin
31
Formas de recuperar un objeto (I):
32
Formas de recuperar un objeto (II):
34
Cache
35
La cach de la sesin es una cache de mbito transaccin.
Es obligatoria y no puede desactivarse.
Es una cach de post-escritura. Es decir los cambios son
persistidos cuando:
Se confirma la transaccin
Algunas veces antes de realizar una consulta
Llamando explcitamente a Session.flush().
La cach de sesin asegura que cuando recuperas el
mismo objeto persistente dos veces, se devuelve la misma
instancia (java).
Existe una cache de segundo-nivel compartida por todas las
sesiones. Las instancias son almacenadas en esta cach en
una forma desensamblada (parecido a la serializacin).
36
Conclusiones
37
Hibernate es una buena herramienta para el
mapeo de clases en una base de datos relacional,
pero le falta funcionalidad y capacidad en el
manejo de transacciones y conexiones
Hibernate es menos invasivo que otros marcos
de trabajo de mapeo O/R.
Utiliza reflexin y la generacin de bytecodes en
tiempo de ejecucin.
La generacin del cdigo SQL se realiza en el
arranque.
38
Referencias
http://www.hibernate.org/
Tutorial de Hibernate:
http://www.hibernate.org/hib_docs/reference/en/html/
39