Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Introducción Al Mapeo Objeto-Relacional
Introducción Al Mapeo Objeto-Relacional
Mapeo Objeto-Relacional
Página 1 de 12
ACCESO A DATOS. UNIDAD 04. Mapeo Objeto-Relacional
El ORM convierte de forma automática los objetos en registros y viceversa, simulando así tener
una base de datos orientada a objetos.
Las herramientas ORM actúan como un puente que conecta las ventajas de los RDBMS con la
buena representación de estos en un lenguaje Orientado a Objetos, o, dicho en otras palabras,
nos lleva de la base de datos al lenguaje de programación.
Página 2 de 12
ACCESO A DATOS. UNIDAD 04. Mapeo Objeto-Relacional
2.1. Características.
Las herramientas ORM facilitan el mapeo de atributos entre una BD relacional y el modelo de
objetos de una aplicación, mediante archivos declarativos (XML) que permiten establecer estas
relaciones. Las ORM, permiten conectar con una BD relacional para extraer la información
contenida y convertirla en objetos. Tendremos que definir la forma de establecer la
correspondencia entre las clases y las tablas una sola vez (indicando qué propiedad se
corresponde con cada columna, qué clase con cada tabla, etc.). Una vez hecho esto, podremos
utilizar POJO's de nuestra aplicación e indicar a la ORM que los haga persistentes, consiguiendo
que una sola herramienta pueda leer o escribir en la BD utilizando VO's (*) directamente.
(*)Value Object: objeto que contiene información de negocio estructurada en grupos de items
de datos.
Una herramienta ORM permite tomar un objeto Java y hacerlo persistente, cargar el
objeto de la BD a memoria y permite hacer consultas a las tablas de la BD.
Ventajas de ORM.
Desventajas de ORM.
Página 3 de 12
ACCESO A DATOS. UNIDAD 04. Mapeo Objeto-Relacional
Página 4 de 12
ACCESO A DATOS. UNIDAD 04. Mapeo Objeto-Relacional
Página 5 de 12
ACCESO A DATOS. UNIDAD 04. Mapeo Objeto-Relacional
Indican la correspondencia entre el bean y una tabla de la BD; por tanto, en el momento en que
se inicie una tarea que requiera el acceso a la BD se obtendrá una conexión JDBC.
Podemos utilizar la ingeniería inversa para crear archivos de mapeo basados en tablas de la BD
que seleccionemos. El archivo de ingeniería inversa es Hibernate.reveng.xml y se puede
utilizar para modificar la configuración predeterminada de Hibernate.cfg.xml con el
propósito de especificar explícitamente el esquema de BD que se va a utilizar, filtrar las tablas
que no deseamos recuperar y especificar cómo se asignan los tipos JDBC a los tipos de
Hibernate.
Para extraer un tabla concreta de la BD, la sintaxis en el mapeo requiere definir el POJO
Nombre_Clase.hbm.xml, donde Nombre_clase se corresponderá con el nombre la tabla
que queremos extraer y donde se describe cómo se relacionan clases con tablas y
propiedades con columnas.
Página 6 de 12
ACCESO A DATOS. UNIDAD 04. Mapeo Objeto-Relacional
Página 7 de 12
ACCESO A DATOS. UNIDAD 04. Mapeo Objeto-Relacional
6. Clases persistentes.
"Persistencia" de los objetos: capacidad para guardarse y recuperarse desde un medio de
almacenamiento. Las clases persistentes sirven para representar entidades de la BD.
El estándar Java Data Objects (JDO), define una clase con capacidad de persistencia, como
aquella que implementa la interface javax.jdo.PersistenceCapable.
Las clases persistentes tienen la capacidad de definir objetos que pueden almacenarse y
recuperarse y un almacén persistente de datos. La especificación JDO incorpora la figura del
procesador de clases en código ejecutable Java, JDO Enhancer, que es un programa que
modifica los archivos compilados de las clases, añadiendo el código ejecutable necesario para
realizar la grabación y recuperación transparente de los atributos de las instancias persistentes.
JDO permite a los programadores convertir sus clases en persistentes, de forma que los objetos
pertenecientes a clases definidas por el programador pueden mantener su estado, con la única
limitación de que el estado esté compuesto por atributos persistentes que sean independientes
del contexto de ejecución: tipos primitivos, tipos de referencia e interfaz y algunas clases del
sistema que permiten modelar el estado como por ejemplo la clase Array, Date, etc.
Para poder indicar las clases y atributos que son persistentes, se utiliza un fichero de
configuración XML, que se denomina descriptor de persistencia.. Para que las instancias de las
clases persistentes puedan mantenerse en los sistemas gestores de bases de datos, es necesario
establecer la correspondencia entre los objetos y su estado persistente.
1. Transitorio (Transient). Estado de un objeto recién creado que no ha sido enlazado con el
gestor de persistencia.
2. Persistente: Estado de un objeto enlazado con la sesión. Todos los cambios que se realicen
será persistentes.
3. Disociado (Detached): En este caso nos encontramos con un objeto persistente que sigue en
memoria después de que termine la sesión. En este caso existe en Java y en la BD.
4. Borrado (Removed): En este caso el objeto está marcado para ser borrado de la BD. Existe
en la aplicación Java y se borrará de la base de datos al terminar la sesión.
Página 8 de 12
ACCESO A DATOS. UNIDAD 04. Mapeo Objeto-Relacional
Los objetos cargados, grabados, creados o consultados por la sesión pueden ser manipulados por
la aplicación, y cualquier cambio a su estado de persistencia será persistido cuando se le aplique
"flush" a la sesión.
No hay que invocar ningún método en particular para que las modificaciones se vuelvan
persistentes. La manera más sencilla y directa de actualizar el estado de un objeto es cargarlo
con load(), y luego manipularlo directamente, mientras la sesión esté abierta.
Para borrar objetos persistentes, podemos ejecutar Session.delete(), que quitará el estado
de un objeto de la BD. Por supuesto, su aplicación podría aún contener una referencia al objeto
quitado. Se puede borrar objetos en cualquier orden, no se van producir violaciones de clave
foránea, pero sí es posible violar constraints NOT NULL aplicadas a la columna de clave
foránea.
Muchas aplicaciones necesitan capturar un objeto en una transacción, mandarlo a la capa de
interfaz de usuario para su manipulación, y grabar sus cambios en una nueva transacción. Las
Página 9 de 12
ACCESO A DATOS. UNIDAD 04. Mapeo Objeto-Relacional
aplicaciones que usan este tipo de estrategia en entornos de alta concurrencia, normalmente usan
datos versionados para garantizar aislamiento durante la "larga" unidad de trabajo.
9. Consultas SQL.
Usando Hibernate, la ejecución de consultas SQL nativas se controla por medio de la interfaz
SQLQuery, la cual se obtiene llamando a Session.createSQLQuery(). Las siguientes
secciones describen cómo utilizar esta API para consultas
La consulta SQL más básica es para obtener a una lista de escalares (valores).
Asumiendo que Persona es mapeado como una clase con las columnas IDENTIFICACION,
NOMBRE y FECHA DE NACIMIENTO las consultas anteriores devolverán una Lista en donde
cada elemento es una entidad Persona.
Interfaz org.hibernate.Session:
Interface org.hibernate.SQLQuery:
Página 10 de 12
ACCESO A DATOS. UNIDAD 04. Mapeo Objeto-Relacional
La cláusula where: permite refinar la lista de instancias retornadas. Si no existe ningún alias,
puede referirse a las propiedades por nombre: from Alumnos where
nombre='Francisco'. Si existe un alias, usaremos un nombre de propiedad calificado: from
Alumnos as alumnos where alumnos.nombre='Francisco'. Esto retorna instancias de
Alumnos llamados "Francisco".
La cláusula order by. Ordena la lista devuelta por cualquier propiedad de una clase retornada o
componentes. La palabra asc o desc opcionales indican ordenamiento ascendente o
descendente respectivamente.
Página 11 de 12
ACCESO A DATOS. UNIDAD 04. Mapeo Objeto-Relacional
La cláusula group by. Una consulta que retorna valores agregados se puede agrupar por
cualquier propiedad de una clase retornada o componentes:
Debes conocer
11.Gestión de transacciones.
DEF.- Transacción: conjunto de órdenes que se ejecutan formando una unidad de trabajo, en
forma indivisible o atómica.
Para la gestión de transacciones en Hibernate, no se produce bloqueo de objetos en la memoria.
La aplicación puede esperar el comportamiento definido por el nivel de aislamiento de sus
transacciones de las BD. Gracias a la Session, la cual también es un caché con alcance de
transacción. el objeto Session se encarga de gestionar la transacción.
El objeto Session se obtiene a partir de un objeto SessionFactory , invocando el método
openSession. Un objeto SessionFactory representa una configuración particular de un
conjunto de metadatos de mapping objeto/relacional.
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = null;
try
{
tx = session.beginTransaction();
// Utilizar la Session para saveOrUpdate/get/delete/...
tx.commit();
} catch (Exception e)
{
if (tx != null)
{
tx.rollback();
throw e;
}
} finally {
session.close();
}// Al finalizar la aplicación ...HibernateUtil.shutdown( );
Cuando se crea el objeto Session, se le asigna la conexión de la BD que va a utilizar. Una vez
obtenido el objeto Session, se crea una nueva unidad de trabajo (Transaction) utilizando el
método beginTransaction. Dentro del contexto de la transacción creada, se pueden
invocarlos métodos de gestión de persistencia proporcionados por el objeto Session, para
recuperar, añadir, eliminar o modificar el estado de instancias de clases persistentes. También se
pueden realizar consultas. Si las operaciones de persistencia no han producido ninguna
excepción, se invoca el método commit de la unidad de trabajo para confirmar los cambios
realizados. En caso contrario, se realiza un rollback para deshacer los cambios producidos.
Sobre un mismo objeto Session pueden crearse varias unidades de trabajo. Finalmente se
cierra el objeto Session invocando su método close.
Página 12 de 12