Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 12

ACCESO A DATOS. UNIDAD 04.

Mapeo Objeto-Relacional

1. Concepto de Mapeo objeto-relacional.


2. Herramientas ORM. Características y herramientas más utilizadas.
2.1. Características.
2.2. Herramientas ORM más utilizadas.
3. Instalación y configuración de Hibernate.
4. Ficheros de configuración y mapeo. Estructura y propiedades.
4.1. Ficheros de configuración. Propiedades.
4.2. Ficheros de mapeo. Estructura, elementos y propiedades.
5. Mapeo de colecciones, relaciones y herencia.
6. Clases persistentes.
7. Sesiones; estados de un objeto.
8. Carga, almacenamiento y modificación de objetos.
8.1. Almacenamiento y modificación de objetos persistentes.
9. Consultas SQL.
10. Lenguajes propios de la herramienta ORM.
11. Gestión de transacciones.

Página 1 de 12
ACCESO A DATOS. UNIDAD 04. Mapeo Objeto-Relacional

1. Concepto de Mapeo objeto-relacional.


Problema: existe una incompatibilidad de sistemas de tipos de datos entre los objetos de un
programa orientado a objetos y los tipos en una BD relacional. En el SW orientado a objetos,
tenemos clases y objetos, mientras que en las BDR, hay tablas y sus restricciones. Es necesaria
una traducción entre ambas formas.
Mapeo objeto-relacional (ORM): Técnica de programación cuyo propósito es convertir datos
usados en un lenguaje de programación orientado a objetos y los usados en una BD relacional,
gracias a la persistencia. Esto posibilita el uso en las BD relacionales de las características
propias de la programación orientada a objetos (básicamente herencia y polimorfismo).
La mayoría de las aplicaciones se construyen usando técnicas de programación orientada
a objetos; sin embargo, los sistemas de BD más extendidos son de tipo relacional.
Las BD más extendidas son del tipo relacional y sólo permiten guardar tipos de datos primitivos
(enteros, cadenas de texto, etc.)  No puedo guardar de forma directa los objetos de la
aplicación en las tablas. Se debe convertir los valores de los objetos en valores simples que
puedan ser almacenados en una BD (y poder recuperarlos más tarde).
El mapeo objeto-relacional surge para traducir los objetos a formas que puedan ser almacenadas
en BD preservando las propiedades de los objetos y sus relaciones; estos objetos se dice
entonces que son persistentes.

El ORM convierte de forma automática los objetos en registros y viceversa, simulando así tener
una base de datos orientada a objetos.

2. Herramientas ORM. Características y herramientas más utilizadas.


Object Relational Mapping (ORM) es la herramienta que nos sirve para transformar
representaciones de datos de los RBDMS, a representaciones (Modelos) de objetos..
En el modelo relacional, cada fila en la tabla se mapea a un objeto y cada columna a una
propiedad.

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.

1. Ayudan a reducir el tiempo de desarrollo de software. La mayoría de herramientas


ORM, permiten la creación del modelo a través del esquema de la BD, es decir, el
usuario crea la BD y la herramienta automáticamente lee el esquema de tablas y
relaciones y crea un modelo ajustado.
2. Abstracción de la base de datos.
3. Reutilización.
4. Permiten persistir objetos a través de un método Orm.Save y generar el SQL
correspondiente.
5. Permiten recuperar los objetos persistidos a través de un método Orm.Load.
6. Lenguaje propio para realizar las consultas.
7. Independencia de la base de datos.
8. Incentivan la portabilidad y escalabilidad de los programas de software.

Desventajas de ORM.

1. Elevado tiempo utilizado en el aprendizaje. Estas herramientas suelen ser complejas de


aprender a manejar para sacarles rendimiento.
2. Menor rendimiento (aplicaciones algo más lentas). Debido a que todas las consultas que
se hagan sobre la BD, el sistema primero deberá de transformarlas al lenguaje propio de
la herramienta, luego leer los registros y por último crear los objetos.
3. Sistemas complejos. Normalmente la utilidad de ORM desciende con la mayor
complejidad del sistema relacional.

Página 3 de 12
ACCESO A DATOS. UNIDAD 04. Mapeo Objeto-Relacional

2.2. Herramientas ORM más utilizadas.


Hibernate:
Herramienta para la plataforma Java (también para .Net con el nombre de NHibernate) que
facilita el mapeo de atributos entre una BD relacional tradicional y el modelo de objetos de una
aplicación. Utiliza archivos XML o anotaciones en los beans de las entidades que permiten
establecer estas relaciones.
Hibernate es software libre, distribuido bajo los términos de la licencia GNU LGPL.
Java Persistence Api (JPA):
Es una especificación de Sun Microsystems para la persistencia de objetos Java a cualquier BD
relacional. Desarrollada para la JEE e incluida en el estándar de EJB 3.0, formando parte de la
Java Specification Request JSR 220.
Para su utilización, JPA requiere de J2SE 1.5 o superior, ya que usa anotaciones y genéricos.
iBatis:
Desarrollado por la Apache software Foundation. Es una herramienta de código libre.
iBatis sigue el mismo esquema de uso que Hibernate; se apoya en ficheros de mapeo XML para
persistir la información contenida en los objetos en un repositorio relacional.

3. Instalación y configuración de Hibernate.


La instalación de Hibernate sobre el IDE NetBeans requiere tener instalado previamente este
entorno de desarrollo, junto al JDK.
Debes conocer
La instalación del JDK y del entorno de desarrollo NetBeans en Linux. En el siguiente enlace
accederás a una animación para que sepas cómo realizar la instalación de ambos.
Resumen textual alternativo
Netbeans incorpora Hibernate como un plugin. Hay que ir a la lista de plugins de NetBeans y
comprobar que lo tienes instalado; en caso contrario, deberás instalarlo.
Debes conocer
La instalación de Hibernate en NetBeans. En la siguiente animación puedes ver cómo se hace.
Para utilizar Hibernate en una aplicación, es necesario conocer cómo configurarlo.
Hibernate puede configurarse y ejecutarse en la mayoría de aplicaciones Java y entornos de
desarrollo. El archivo de configuración de Hibernate recibe el nombre de Hibernate.cfg.xml y
contiene información sobre la conexión a la BD y otras propiedades. Al crearlo, hay que
especificar la conexión a la base de datos.
En los siguientes puntos del tema veremos más detenidamente el proceso de configuración.

Página 4 de 12
ACCESO A DATOS. UNIDAD 04. Mapeo Objeto-Relacional

4. Ficheros de configuración y mapeo. Estructura y propiedades.


Para empezar a trabajar con Hibernate es necesario configurar la herramienta para que conozca
qué objetos debe recuperar de la BD relacional y en qué lugar los hará persistir. Por tanto, el
primer paso será tener una base de datos relacional con la que poder trabajar.
Debes conocer
La creación y conexión de la BD relacional, sakila (MySQL), con la que trabajará Hibernate.
Resumen textual alternativo
En NetBeans, cuando se crea el archivo de configuración de Hibernate usando el asistente,
podemos especificar la conexión a la BD, eligiendo de una lista de conexiones de BD
registradas en el IDE. Cuando se genera el archivo de configuración, el IDE añade de forma
automática detalles de la conexión e información basada en la conexión de la BD seleccionada.
El IDE añade las bibliotecas de Hibernate al proyecto.
El fichero de configuración contiene información sobre la BD a la que vamos a conectar la
aplicación. Si la aplicación se va a conectar a varias BD, sería necesario definir tantos archivos
de configuración como BD a las que queramos conectar.
Para tener toda esta información, Hibernate usa dos ficheros distintos:

 Archivo de propiedades de Hibernate (Hibernate.properties), que es el encargado


de determinar todos los aspectos relacionados con el gestor de la BD y las conexiones
con él.
 Archivos que definen el emparejamiento (mapping) de propiedades con tablas y
columnas (*.hbm.xml).

Para utilizar Hibernate necesitamos tener una BD relacional instalada en NetBeans. La


base de datos Sakila es una muestra gratuita disponible, como plugin, en NetBeans.
La seleccionamos desde la lista de plugins disponibles y la instalamos en nuestro IDE.

4.1. Ficheros de configuración. Propiedades.


El archivo de configuración de Hibernate es Hibernate.cfg.xml y contiene información
sobre la conexión a la BD, las asignaciones de recursos y otras propiedades de conexión.
Debes conocer
El proceso de creación de una aplicación Java en NetBeans y la configuración de Hibernate para
poder acceder posteriormente a la base de datos sakila.
Resumen textual alternativo
Al seleccionar una conexión a una BD en NetBeans, se crea un archivo de configuración en
Hibernate que guarda los detalles la conexión. NetBeans también añade de forma automática la
biblioteca de Hibernate a nuestro proyecto. Después de la creación del archivo
Hibernate.cfg.xml, podemos editarlo o modificar el código xml.

Página 5 de 12
ACCESO A DATOS. UNIDAD 04. Mapeo Objeto-Relacional

Las propiedades más importantes del fichero Hibernate.cfg.xml son:

 Hibernate.dialect: Dialecto o lenguaje empleado. Por ejemplo, MySQL.


 Hibernate.connection.driver_class. Driver usado para la conexión con la BD.
 Hibernate.connection.url. Dirección de la BD con la que se va a conectar
Hibernate.
 Hibernate.connection.username. Nombre usuario que se va a conectar. Por
defecto, es root.
 Hibernate.connection.password. Contraseña del usuario.
 Hibernate.show_sql. Para mostrar por consola todas las sentencias SQL generadas.
Por defecto, su valor es true.

4.2. Ficheros de mapeo. Estructura, elementos y propiedades.


Hibernate utiliza ficheros de mapeo para relacionar tablas con objetos Java, estos ficheros están
en formato XML y que tienen extensión .hbm.xml.
<Hibernate-mapping>: Todos los ficheros de mapeo comienzan y acaban con esta etiqueta.
Al comienzo indicamos en el atributo package el paquete Java donde se encuentra la clase.

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

Mediante el asistente de NetBeans, seleccionamos Nuevo Mapeo en Hibernate y rellenamos los


campos que nos piden, en función de la información que nos interese extraer de la BD.
NetBeans genera un POJO nombre_clase.java (siendo nombre_clase la tabla cuya
información nos interesa extraer de la BD) con todos los campos necesarios.
Con ello, genera un fichero de mapeo de Hibernate, agregando su entrada a
Hibernate.cfg.xml, entre las etiquetas .
Debes conocer
El proceso de creación de archivos de mapeo en Hibernate.

5. Mapeo de colecciones, relaciones y herencia.


1. Mapeo de colecciones.
Hay bastantes rangos de mapeos que se pueden generar para colecciones que cubran diversos
modelos relacionales.
El elemento de mapeo de Hibernate utilizado para mapear una colección depende del tipo de la
interfaz; por ejemplo, un elemento se utiliza para mapear propiedades de tipo Set aunque, no
obstante, existen además los elementos de mapeo etc.
Las instancias de colección de distinguen por la clave foránea de la entidad que posee la
colección. El elemento mapea la columna clave de la colección.
Hay que resaltar que las colecciones pueden contener casi cualquier tipo de datos; esto implica
que un objeto en una colección puede ser manejado con una semántica de "valor" o podría ser
una referencia a otra entidad, con su propio ciclo de vida. Todos los mapeos de colección
necesitan una columna índice en la tabla de colección: una columna índice es una columna que
mapea a un índice de array o índice de List. Por último, una colección de valores o asociación
muchos-a-muchos requiere una tabla de colección dedicada con una columna o columnas de
clave foránea, columna de elemento de colección y probablemente una o varias columnas
índice.
2. Mapeo de relaciones.
Para persistir, las relaciones usan las denominadas transacciones, ya que los cambios pueden
incluir varias tablas. Una regla general para el mapeo es respetar el tipo de relación en el modelo
de objetos y en el modelo relacional: así, una relación 1-1 en el modelo de objetos deberá
corresponderse a una relación 1-1 en el modelo relacional.
Para mapear las relaciones, se usan los identificadores de objetos (OID). Son la llave primaria
de la tabla relacionada y se agregan como una columna más en la tabla donde se quiere
establecer la relación. Dicha columna es una clave foránea a la tabla con la que está relacionada.
3. Mapeo de herencia.
Como hemos comentado, las colecciones funcionan en ambos modelos, objeto y relacional. Para
el caso de la herencia se presenta el problema que las base de datos relacionales no la soportan.
Así es que somos nosotros quienes debemos modelar como se verá la herencia en el modelo
relacional. Existen tres tipos de mapeos principales: modelar la jerarquía a una sola tabla,
modelar la jerarquía completa en tablas, mapear cada tabla en tablas concretas. La decisión
estará basada en el rendimiento y en la escalabilidad del modelo.

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.

7. Sesiones; estados de un objeto.


Para utilizar la persistencia en Hibernate es necesario definir un objeto Session utilizando la
clase SesssionFactory. La sesión corresponde con un objeto que representa una unidad
de trabajo con la BD. La sesión nos permite representar el gestor de persistencia, ya que
dispone de una API básica que nos permite cargar y guardar objetos.
La sesión está formada internamente por una cola de sentencias SQL que son necesarias ejecutar
para poder sincronizar el estado de la sesión con la base de datos.
Asimismo, la sesión contiene una lista de objetos persistentes. Un sesión corresponde con el
primer nivel de caché.
Si para realizar el acceso a datos, usamos Hibernate, la sesión permite definir el alcance de un
contexto determinado. Para poder utilizar los mecanismos de persistencia de Hibernate se debe
inicializar el entorno Hibernate y obtener un objeto Session utilizando la clase
SessionFactory. Un objeto Session Hibernate representa una única unidad-de-trabajo para un
almacén de datos dado y lo abre un ejemplar de SessionFactory. Se deben cerrar las sesiones
cuando se haya completado todo el trabajo de una transacción.
Los estados en los que se puede encontrar un objeto son:

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

8. Carga, almacenamiento y modificación de objetos.


Para cargar un objeto de acceso a datos en la aplicación Java, el método load() de la clase
Session suministra un mecanismo para capturar una instancia persistente, si conocemos su
identificador. El método load() acepta un objeto Class, y cargará el estado de una nueva
instancia de esa clase, inicializada en estado persistente.
load() lanzará una excepción irrecuperable si no existe la fila de la BD correspondiente. Si no
estás seguro de que exista una fila correspondiente, debes usar el método get(), el cual
consulta la BD inmediatamente y devuelve null si no existe una fila correspondiente
Existen dos métodos que se encargan de recuperar un objeto persistente por identificador:
load() y get(). Diferencia: cómo indican que un objeto no se encuentra en la BD: get()
devuelve un nulo y load() lanza una excepción ObjectNotFoundException.
Aparte de esta diferencia, load() intenta devolver un objeto proxy siempre y cuando le sea
posible (no esté en el contexto de persistencia). Con lo que es posible que la excepción sea
lanzada cuando se inicialice el objeto proxy. Esto es conocido como carga perezosa.
En el caso que se obtenga un proxy, no tiene impacto sobre la base de datos (no se ejecuta
ninguna consulta), hasta que no se inicializa el mismo. Muy útil cuando se obtiene una
referencia de un objeto para asociarlo a otro. (No es necesario obtener el objeto).Se modifica un
objeto persistente.

8.1. Almacenamiento y modificación de objetos persistentes.


Para almacenar objetos persistentes se dan los siguientes pasos:

1. Se instancia un objeto nuevo (estado transitorio).


2. Se obtiene una sesión y se comienza la transacción, inicializando el contexto de
persistencia.
3. Una vez obtenida la sesión, se llama al método save(), el cual introduce el objeto en el
contexto de persistencia y devuelve el identificador del objeto persistido.
4. Para sincronizar cambios en las BD, es necesario realizar el commit de la transacción.
Dentro del objeto sesión se llama al método flush(). Es posible llamarlo
explícitamente. En este momento, se obtiene la conexión JDBC a la BD para poder
ejecutar la oportuna sentencia.
5. Finalmente, se cierra sesión, con el objeto de liberar el contexto de persistencia, y por
tanto, devolver la referencia del objeto creado al estado disociado.

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.

Hibernate soporta este modelo, proveyendo "reasociación" de entidades desprendidas usando


los métodos Session.update() o Session.merge().

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).

 sess.createSQLQuery("SELECT * FROM Personas").list();


 sess.createSQLQuery("SELECT ID,NOMBRE, EDAD
FROM PERSONAS").list();
Estas retornarán una lista de objetos arrays (Object[]) con valores escalares para cada
columna en la tabla PERSONAS. Hibernate utilizará ResultSetMetadata para deducir el
orden real y los tipos de los valores escalares retornados.
Consulta de entidades (es más compleja): sirve para obtener los objetos entidades desde una
consulta sql nativa, se utiliza por medio de addEntity().
 sess.createSQLQuery("SELECT * FROM PERSONAS")
.addEntity(Persona.class);
 sess.createSQLQuery("SELECT ID,NOMBRE,EDAD FROM PERSONAS")
.addEntity(Persona.class);
Se especifica esta consulta:
 La cadena de consulta SQL.
 La entidad devuelta por la consulta.

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:

public SQLQuery createSQLQuery(String queryString)


throws HibernateException

Interface org.hibernate.SQLQuery:

Método heredado de org.hibernate.SQLQuery

public List list() throws HibernateException

Devuelve como una lista el resultado de la consulta.

public SQLQuery addEntity(Class entityClass)

Página 10 de 12
ACCESO A DATOS. UNIDAD 04. Mapeo Objeto-Relacional

10.Lenguajes propios de la herramienta ORM.


HQL es el lenguaje de consultas propio de Hibernate (parecido a SQL). HQL es completamente
orientado a objetos y comprende nociones como herencia, polimorfismo y asociación. Las
consultas se escriben en HQL  Hibernate la convierte a SQL y la envía a la BD para su
ejecución.
HQL es que es case-insensitive. Por tanto "SeLeCt", "seleCT", "select", y "SELECT" son la
misma cosa. Cuidado: para los nombres de las clases y sus propiedades, sí es case-sensitive. O
sea, "pruebas.Hibernate.Usuario" NO ES LO MISMO que "PrueBAs.Hibernate.UsuArio".
Entre las características más importantes de HQL.

1. Soporte completo para operaciones relacionales: HQL permite representar consultas


SQL en forma de objetos. HQL usa clases y atributos o propiedades en vez de tablas y
columnas.
2. Devuelve sus resultados en forma de objetos o listas de objetos, que son más fáciles de
usar.
3. Consultas Polimórficas: Podemos declarar el resultado usando el tipo de la superclase e
Hibernate se encargara de crear los objetos adecuados de las subclases correctas de
forma automática.
4. Soporte para características avanzadas: que son muy útiles y no siempre están presentes
en todas las BD, o no es fácil usarlas, como paginación, fetch joins con perfiles
dinámicos, inner y outer joins, etc. Además soporta proyecciones, funciones de
agregación (max, avg), y agrupamientos, ordenamientos, y subconsultas.
5. Independiente del manejador de BD: Las consultas escritas en HQL son independientes
de la BD (siempre que la BD soporte la característica que estamos intentando utilizar)

10.1. Lenguaje HQL.


Clausula from: Es la consulta más simple. Ejemplo: consulta que mostraría todos los datos de
una tabla de nombre Alumnos: from Alumnos

Cláusula select: escoge qué objetos y propiedades devolver en el conjunto de resultados de la


consulta. Ejemplo:
select alumno.nombre from Alumnos alumno where alumno.nombre like 'A%'

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".

Funciones de agregación. select avg(alumnos.nota), sum(alumnos.nota),


max(alumnos.nota), count(alumnos) from Alumnos alumnos.

Expresiones. Las expresiones utilizadas en la cláusula where incluyen lo siguiente: operadores


matemáticos, operadores de comparación binarios, operadores lógicos (and, or,not), paréntesis (
) que indican agrupación, funciones Java, etc.

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:

Subconsultas. Para BD que soportan subconsultas, Hibernate soporta subconsultas dentro de


consultas. Una subconsulta se debe encerrar entre paréntesis (frecuentemente por una llamada a
una función de agregación SQL). Incluso se permiten subconsultas correlacionadas
(subconsultas que se refieren a un alias en la consulta exterior).

Debes conocer

El proceso de creación de consultas HQL en formularios con Hibernate en NetBeans para


extraer informacion almacenada en una base de datos relacional.

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

También podría gustarte