PDF de programación - Hibernate

Imágen de pdf Hibernate

Hibernategráfica de visualizaciones

Actualizado el 15 de Diciembre del 2018 (Publicado el 24 de Noviembre del 2018)
726 visualizaciones desde el 24 de Noviembre del 2018
664,1 KB
55 paginas
Creado hace 15a (30/05/2008)
HHHiiibbbeeerrrnnnaaattteee

Hibernate

14-1


Persistencia usando Hibernate
Correspondencia entre el modelo relacional y el modelo de objetos
Las aplicaciones web, tales como un carrito de la compra online, van a utilizar bases de
datos para almacenar sus datos de forma persistente.
Se entiende por persistencia la capacidad que tienen los objetos de conservar su estado e
identidad entre distintas ejecuciones del programa que los creó o de otros programas que
accedan a ellos. Las bases de datos relacionales son la opción más popular para
almacenar datos.
La programación orientada a objetos y las bases de datos relacionales, se apoyan en dos
paradigmas diferentes. El modelo relacional trata con relaciones, y conjuntos. Sin
embargo, el paradigma orientado a objetos trata con objetos, sus atributos y
asociaciones de unos con otros.

Hay una desaveniencia entre estos dos paradigmas, la también llamada diferencia
objeto-relacional. Un mapeador objeto-relacional (u ORM para abreviar) nos ayudará
evitar esta diferencia.
La diferencia objeto-relacional se amplia muy rápidametne si tienes grandes modelos de
objetos. Y hay muchas más cosas a considerar como la carga lenta, las referencias
circulares, el caché, etc. De hecho, se han realizado estudios que demuestran que el
35% del código de una aplicación se produce para mapear datos entre la aplicación y la
base de datos.



Un ORM intenta reducir la mayoría de esa carga de trabajo. Con un buen ORM, sólo
tienes que definir una vez la forma en que tus clases se mapean a tablas.



14-2

Hibernate


Desarrolladores Java acostumbrados a trabajar con JDBC probablemente se pregunten
cuáles son las razones para utilizar un ORM.
Introducción a Hibernate
Introducción
Hibernate es una herramienta ORM completa que ha conseguido en un tiempo record una
excelente reputación en la comunidad de desarrollo posicionándose claramente como el
producto OpenSource líder en este campo gracias a sus prestaciones, buena
documentación y estabilidad. Es valorado por muchos incluso como solución superior a
productos comerciales dentro de su enfoque, siendo una muestra clara de su reputación
y soporte la reciente integración dentro del grupo JBoss que seguramente generará
iniciativas muy interesantes para el uso de Hibernate dentro de este servidor de
aplicaciones.

Se empezó a desarrollar hace algo unos años por Gavin King siendo hoy Gavin y
Christian Bauer los principales gestores de su desarrollo.

Hibernate parte de una filosofía de mapear objetos Java "normales", también conocidos
en la comunidad como "POJOs" (Plain Old Java Objects), no contempla la posibilidad de
automatizar directamente la persistencia de Entity Beans tipo BMP (es decir, generar
automáticamente este tipo de objetos), aunque aún asi es posible combinar Hibernate
con este tipo de beans utilizando los conocidos patrones para la delegación de
persistencia en POJOs.
Una característica de la filosofía de diseño de Hibernate ha de ser destacada
especialmente, dada su gran importancia: puede utilizar los objetos Java definidos por el
usuario tal cual, es decir, no utiliza técnicas como generación de código a partir de
descriptores del modelos de datos o manipulación de bytecodes en tiempo de
compilación (técnica conocida por su amplio uso en JDO), ni obliga a implementar

Hibernate

14-3


interfaces determinados, ni heredar de una superclase. Utiliza en vez de ello el
mecanismo de reflexión de Java.

Las razones que hacen que el uso de Hibernate sea muy importante son:

Simplicidad y flexibilidad: necesita un único fichero de configuración en tiempo de
ejecución y un documento de mapeo para cada aplicación. Este fichero puede ser
el estándar de Java (extensión properties) o un fichero XML. También se tiene la
alternativa de realizar la configuración de forma programática. El uso de
frameworks de persistencia, tales como EJBs hace que la aplicación dependa del
framework. Hibernate no crea esa dependencia adicional. Los objetos persistentes
en la aplicación no tienen que heredar de una clase de Hibernate u obedecer a
una semántica específica. Tampoco necesita un contenedor para funcionar.

Completo: ofrece todas las características de orientación a objetos, incluyendo la
herencia, tipos de usuario y las colecciones. Además, también proporciona una
capa de abstracción SQL llamada HQL. Las sentencias HQL son compiladas por el
framework de Hibernate y cacheadas para su posible reutilización.

Prestaciones: uno de las grandes confusiones que aparecen al utilizar este tipo de
frameworks es creer que las prestaciones de la aplicación se ven muy mermadas.
Este no es el caso de Hibernate. La clave en este tipo de situaciones es si se
realizan el número mínimo de consultas a la base de datos. Muchos frameworks
de persistencia actualizan los datos de los objetos incluso cuando no ha cambiado
su estado. Hibernate sólo lo hace si el estado de los objetos ha cambiado. El
cacheado de objetos juega un papel importante en la mejora de las prestaciones
de la aplicación. Hibernate acepta distintos productos de cacheado, tanto de
código libre como comercial.



14-4


Conceptos básicos

Hibernate

Hibernate distingue entre dos tipos de objetos:

Tipos de Objetos

Transient: sólo existen en memoria y no en un almacén de datos (recuérdese en
este sentido también el modificador transient de Java), en algunos casos, no
serán almacenados jamás en la base de datos y en otros es un estado en el que
se encuentran hasta ser almacenados en ella. Los objetos transient han sido
instanciados por el desarrollador sin haberlos almacenado mediante una sesión.

Persistent: se caracterizan por haber sido ya almacenados y ser por tanto objetos
persistentes. Han sido creados y almacenados en una sesión o bien devueltos en
una consulta realizada con la sesión.

Sesión

Para almacenar y recuperar estos objetos de la base de datos, el desarrollador debe
mantener una conversación con el motor de Hibernate mediante un objeto especial, la
sesión (clase Session).
Sirve para delimitar una o varias operaciones relacionadas dentro de un proceso de
negocio, demarcar una transacción y aporta algunos servicios adicionales como una
caché de objetos para evitar interacciones innecesarias contra la Base de Datos.
Las sesiones son un concepto ligado a un proceso de negocio, por tanto es natural pensar
que una sesión siempre va a pertener a un mismo thread de ejecución (el que pertenece
a la ejecución de un método de negocio para un usuario o sistema externo concreto),
aunque técnicamente se pueden compatir sesiones entre threads, esto no se debe hacer
jamás por no ser una buena política de diseño y los consecuentes problemas que puede
generar.

Hibernate

14-5


En un entorno multiusuario y por tanto multithread habrá por tanto múltiples sesiones
simultáneas, cada una perteneciente a su correspondientes threads y con su contexto de
objetos en caché, transacciones, etc.
Como tal no sorprende que las sesiones no son “thread-safe” y que la información
vinculada a ella no sea visible para otras sesiones. Es también lógico que tenga que
existir una “institución” superior para crear sesiones y realizar operaciones comunes a los
diferentes threads como lo puede ser la gestión de una caché compartida entre threads o
caché de segundo nivel.

Este elemento es la clase SessionFactory y en ella podremos encontrar métodos como
openSession() o evict(Class persistentClass).



14-6



Hibernate

Se analiza la arquitectura de Hibernate desde un punto de vista muy general:

Arquitectura Hibernate

Hibernate utiliza la base de datos y los ficheros de configuración para proporcionar
servicios de persistencia a la aplicación.



Hibernate



14-7



14-8

Hibernate


Entorno de desarrollo
Introducción
El principal objetivo en esta capítulo es conocer cuáles son los pasos a llevar a cabo para
poder construir un proyecto con Hibernate. Para ello se deben realizar una serie de
tareas generales:

Obtener una distribución de Hibernate: el primer paso para crear un proyecto con

Hibernate será obtener la última copia de Hibernate de su sitio web.

Obtener Ant: (Java build tool) no es estrictamente necesaria pero no hará la vida

más fácil.

Configurar una base de datos.

Distribución de Hibernate
Bibliotecas
Hibernate

Descripción
Clases de la API de Hibernate incluyendo la clase
SchemaExportTask
Las clases que forman la extensión de Hibernate
incluyendo la clase Hbm2JavaTask.
Clases de Hibernate auxiliares

Hibernate-
Extensions
Hibernate-lib

Ficheros JAR/Zip
hibernate2.jar

hibernate-tools.jar

dom4j-1.4.jar
commons-logging-1.0.4.jar
commons-collections-2.1.1.jar
ehcache-0.9.jar
cglib-full-2.0.2.jar
jta.jar

Generalmente lo que se hará es incluir en nuestros proyectos la siguiente carpeta.

Hibernate



14-9

Ant
Ant es una herramienta del tipo de make (gnumake, nmake...) código abierto. Fué
desarrollada dentro del Proyecto Apache Jakarta(http://jakarta.apache.org/ant) en Java.



Utiliza ficheros de configuración XML.

Para ejecutar Ant en línea de comandos se utiliza el comando ant:



14-10



Hibernate

Por defecto busca el fichero build.xml en el directorio actual.
-find busca build.xml en el directorio padre y siguientes h
  • Links de descarga
http://lwp-l.com/pdf14313

Comentarios de: Hibernate (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad