You are on page 1of 15

Programacin Orientada a Objetos 2009 Fac de Ingeniera UNJu

Clase 1 de Hibernate

USO DEL FRAMEWORK HIBERNATE CON NETBEANS


Hibernate es un Framework que permite el mapeo de tablas de base de datos relacionales con clases
definidas en java. De tal forma que cuando hacemos una operacin de guardar, modificar, eliminar o
consultar el estado de uno o varios objetos, l se encarga de generar las sentencias SQL de forma
transparente al programador.
Por otro lado este framework requiere cierta configuracin para usarlo. En general hay una tendencia a
usarlo en la programacin Java Web (J2EE) sin embargo se puede aplicar sin ningn inconveniente en
Java Desktop (J2SE aplicado a Swing).
Ms an usando Netbeans la configuracin resulta muy fcil de realizar, ya que le mismo IDE puede
ayudarnos en todo el proceso del mapeo objeto relacional.
En esta ayuda lo que haremos es usar configurar y usar Hibernate para el mapeo de la Clase Persona
vista en ayudas anteriores.
Paso 1: Creamos un nuevo proyecto. Lo llamaremos Apu San Pedro1. Luego haremos iremos a sus
propiedades (botn derecho sobre el nombre del proyecto, opcin Propiedades) y Agregaremos la
biblioteca del Hibernate.
Nota: Podemos realizar esta operacin sobre el proyecto apu san pedro. Yo lo hago en un nuevo
proyecto para que quede ms claro.

2
3

Ariel Alejandro Vega. Prof. Adjunto

Programacin Orientada a Objetos 2009 Fac de Ingeniera UNJu

Clase 1 de Hibernate

Paso 2: Ahora agregamos el driver de la base de datos. En nuestro caso es Oracle.Para ello procedemos
exactamente igual que en el paso anterior, salvo que en vez de seleccionar Add Library se elige Add
JAR/Folder y se ubica en el explorador la ruta en la cual se halla el driver.

Debera quedar la seccin Libraries conformada como lo representa la siguiente pantalla

Ariel Alejandro Vega. Prof. Adjunto

Programacin Orientada a Objetos 2009 Fac de Ingeniera UNJu

Clase 1 de Hibernate

Es decir se ve que estn agregados el conjunto de archivos de hibrnate y el driver JDBC de Oracle
Paso 3: Configurar la gestin del acceso a la base de datos para que lo realice Hibernate
En clases anteriores vimos que podamos gestionar el acceso a base de datos usando una Clase java
(Conexin.java) en la cual registrbamos el driver y luego configurbamos como conectarnos a la base
de datos.
Usando NetBeans para hibernate esta operacin la podemos realizar mediante un asistente.
Primero para seguir respetando el Patrn DAO creamos el paquete dao de tal forma que la organizacin
quede as

Luego seleccionamos el paquete dao, hacemos botn derecho, elegimos la opcin nuevo y por ltimo la
sub opcin otro.

Ariel Alejandro Vega. Prof. Adjunto

Programacin Orientada a Objetos 2009 Fac de Ingeniera UNJu

Clase 1 de Hibernate

Con lo cual se abrir esta pantalla, en la cual elegimos la categora hibernate y luego elegimos crear un
Hibernate Configuration File

Luego pasamos a la siguiente pantalla, donde nos pide que coloquemos un nombre, en general se suele
dejar el nombre por defecto (hibernate.cfg) al menos que estemos trabajando con varias bases de
datos, entonces podramos indicar a que base de datos corresponde cada archivo de configuracin. Por
lo tanto para este caso lo que hacemos es saltar a la siguiente pantalla, en la cual debemos elegir una
conexin a base de datos. Si ya existe, solo debemos seleccionarla, sino elegimos crear una nueva, tal
como lo muestra la siguiente pantalla

Ariel Alejandro Vega. Prof. Adjunto

Programacin Orientada a Objetos 2009 Fac de Ingeniera UNJu

Clase 1 de Hibernate

Al hacer esto aparece la siguiente pantalla, la cual completamos de tal forma que quede como se ve en
la siguiente pantalla

Estos datos no son al azar, es la misma informacin que habamos colocado en nuestra clase
Conexin.java (OracleConnection.java en la ltima versin).
Luego de dar Ok. les pide elegir el Esquema de la base de datos, aqu deben elegir el esquema que hayan
creado ustedes. Algunos crearon sus tablas en el esquema System, otros crearon sus propios esquemas.
En mi caso yo cree el esquema apu. Por lo tanto se elige el esquema apu.

Ariel Alejandro Vega. Prof. Adjunto

Programacin Orientada a Objetos 2009 Fac de Ingeniera UNJu

Clase 1 de Hibernate

Tambin se puede observar que cuando eligen un esquema Netbeans intenta establecer la conexin con
los parmetros definidos en la pantalla anterior a esta. Si lo logra se visualiza la legenda Connection
established (Conexin Establecida)
Cuando se ha establecido la conexin y se acepta, volvemos a la pantalla donde establecamos la
conexin, en donde se muestra nuestra conexin, quedando almacenada en Netbeans para posteriores
proyectos y adems se puede ver que el Campo Database Dialect dice
org.hibernate.dialect.OracleDialect
Este campo nos indica que hay un archivo llamado OracleDialect ubicado en el paquete
org.hibernate.dialect de la biblioteca Hibernate que agregamos en el primer paso; el cual posee la
relacin entre los tipos de datos de la base de datos Oracle y los tipos de datos de JAVA. Es el encargado
de que el mapeo de ambos tipos de datos se realice de forma correcta.

Al finalizar vemos que el asistente creo el archivo hibernate.cfg.xml en el paquete dao.


Este archivo guarda la informacin necesaria para establecer la conexin a la base de datos.

Si elegimos la opcin XML como lo indica la pantalla anterior podremos ver el contenido del archivo xml

Ariel Alejandro Vega. Prof. Adjunto

Programacin Orientada a Objetos 2009 Fac de Ingeniera UNJu

Clase 1 de Hibernate

Los archivos XML se han convertido en un estndar muy usado para el intercambio de informacin y
configuracin de aplicaciones, de reglas, de formatos de solicitud de requerimientos a travs de la web ,
de la estructura de arquitecturas de frameworks como hibernate, por lo tanto su aprendizaje se vuelve
un requerimiento de todo buen programador y recomiendo que lo aprendan.
Bsicamente para entender este archivo fjense que hay nombres llamados property cuyo nombre estn
en anaranjado. Estos elementos en azul se denominan tags, y el name lo que hace es como definir una
variable de ese tipo de tag. Es como si fuera la Clase Property y lo que est en anaranjado sea un
atributo.
Observen que un tag tiene un principio y un fin por ejemplo
<property> </property>
Es decir la informacin queda en el medio del inicio y fin del tag
Entonces sin entrar en mayor profundidad, los valores claves estn definidos en tags que hibernate ya
tiene definidos con un nombre especfico y cuyo valor es lo que nosotros hemos ingresado en el
asistente (el nombre del driver, la url, el usuario y password, el dialecto)
Paso 4: Crear un manejador del archivo hibernate.cfg.xml. Necesitamos poder usar ese archivo cuando
vamos a realizar un alta, baja, modificacin o consulta. Hay varias formas de hacer esto. Netbeans nos
genera en forma automtica una clase java que se encarga de esta tarea. Su nombre es
HibernateUtil.java. Para crearla hacemos los mismos pasos para crear un archivo
ConfigurationHibernate File, solo que en vez de elegir este archivo hay uno que se llama HibernateUtil

Ariel Alejandro Vega. Prof. Adjunto

Programacin Orientada a Objetos 2009 Fac de Ingeniera UNJu

Clase 1 de Hibernate

Entonces se genera la Clase HibernateUtil.java que tiene la siguiente forma

Ahora debemos hacer un pequeo cambio. HibernateUtil.java busca hibernate.cfg.xml en la raz de


nuestra aplicacin pero nosotros hemos alterado esto colocando este archivo en el paquete dao.
Para modificar esto en el mtodo configure de AnnotationConfiguration debemos pasarle la nueva
ubicacin (lnea 24 del cdigo)
Entonces esa lnea quedara as

De esta forma no saltar ningn error.


Paso 5:
Bien ahora debemos crear la clase Persona y mapearla a la tabla Personas. Hay dos formas de hacer
esto.
La primera es usando el asistente de Netbeans; la otra es hacerla a mano.
Veamos la primera:
Primero creamos el paquete modelo.dominio ya que de esa forma venamos trabajando. Luego
volvemos a crear un archivo de la categora Hibernate, solo que elegimos la opcin Hibernate Mapping
Files and POJOs from Database

Ariel Alejandro Vega. Prof. Adjunto

Programacin Orientada a Objetos 2009 Fac de Ingeniera UNJu

Clase 1 de Hibernate

Esta opcin nos va a crear la clase Personas y el archivo de mapeo desde la tabla Personas que ya debe
estar creada antes, al seguir los siguientes pasos
En la pantalla siguiente no modificamos nada y pasamos a la siguiente.

Ariel Alejandro Vega. Prof. Adjunto

Programacin Orientada a Objetos 2009 Fac de Ingeniera UNJu

Clase 1 de Hibernate

Lo que visualiza son las tablas de la base de datos a la cual estamos conectada por medio del archivo
hibernate.cfg.xml. En este caso solo tengo 2 tablas que son las que use en los ejemplos anteriores.
Agregamos la tabla Personas y pasamos a la siguiente pantalla

Aqu se ve que estn tildados Domain Code (.java): Esta opcin es la que crear la clase
Personas.java
Tambin est tildada Hibernate XML Mappings (.hbm.xml): Esta opcin es la que crea el archivo
que mapea la tabla Personas con la Clase Personas.java

Fijarse que ambos archivos se crearan en el paquete dominio


Si aceptamos el paquete dominio queda as

Como se ven est la Clase Personas.java, el archivo Personas.hbm.xml y el archivo hibernate.reveng.xml


Para nuestro uso no hace falta entender el ltimo archivo.

Ariel Alejandro Vega. Prof. Adjunto

10

Programacin Orientada a Objetos 2009 Fac de Ingeniera UNJu

Clase 1 de Hibernate

Veamos la clase Personas.java

Como se ve esta clase es simplemente un Java Bean. No haran falta mayores explicaciones. Salvo que
para la convencin que venimos manejando el nombre Personas.java no sera del todo correcto.
Por eso modificaremos el nombre de la clase a Persona.java
Ahora veamos el archivo Personas.hbm.xml

Ariel Alejandro Vega. Prof. Adjunto

11

Programacin Orientada a Objetos 2009 Fac de Ingeniera UNJu

Clase 1 de Hibernate

Bien aqu debemos detenernos a analizar cada lnea


El mapeo de la Clase Persona.java con la Tabla Personas empieza en la lnea 5 y finaliza en la
lnea 18 con el tag <hiernate-mapping>
La lnea 6 es muy importante ya que en el tag <class> nosotros definimos en:

name: El nombre de la Clase completo incluido el paquete. Ah es donde debemos


corregir para que quede Persona
table: El nombre de laTabla, que como vimos es PERSONAS
schema: es el nombre del esquema que hemos usado

Las lneas 7 al 10 configuran el taf <id>: Este tag permite mapear la clave primaria de la tabla
Personas con el atributo correspondiente de la clase Persona.java:
Los name siempre se referirn a atributos de clases mientras que los column son los campos de
la tabla
En los property van los mapeos del resto de los atributos de la clase con respecto a los campos
de la tabla.
Fijarse que tienen el mismo formato
Ahora bien, otro aspecto no elegante de esta opcin es que el archivo de mapeo est en el paquete
dominio. Lo correcto sera que est en otro paquete.
Lo que haremos entonces es crear el paquete hibernate y luego moveremos con la opcin refactor el
archivo Personas.hbm.xml a ese paquete, entonces debera quedar as

Ahora fijmonos en nuestro archivo hibernate.cfg.xml

Ariel Alejandro Vega. Prof. Adjunto

12

Programacin Orientada a Objetos 2009 Fac de Ingeniera UNJu

Clase 1 de Hibernate

Fijarse que en la lnea 10 se agreg el tag <mapping>. Esto le sirve al archivo para saber dnde est el
archivo de mapeo. Este tag lo agreg Netbeans al crear el archivo Personas.hbm.xml.
Como usamos la opcin refactor para mover el archivo esta lnea refleja este cambio, pero es una buena
actitud fijarse si el IDE hizo lo que tena que hacer
Paso 6: Aplicar el PATRON DAO usando Hibernate
Bien ahora hacemos lo que ya vimos antes
1) Creamos una interface PersonaDAO en el paquete dao

2) Creamos la clase PersonaDAOImp que implemente PersonaDAO y use hibernate


Como queda definida la clase y el mtodo INSERT

Ariel Alejandro Vega. Prof. Adjunto

13

Programacin Orientada a Objetos 2009 Fac de Ingeniera UNJu

Clase 1 de Hibernate

Como se ve el mtodo UPDATE

Como se ve el mtodo DELETE

Se ve que todos estos mtodos son similares:


Se usa un objeto Session de Hibernate (ojo al importar porque hay otros objetos Session que no
son de hibernate) que a su vez usa la Clase HibernateUtil (por si alguno se preguntaba para que
serva, aqu est la razn)
Como se ve el mtodo GETALL

Ariel Alejandro Vega. Prof. Adjunto

14

Programacin Orientada a Objetos 2009 Fac de Ingeniera UNJu

Clase 1 de Hibernate

Aqu vemos que usamos una Clase Criteria.


En hibernate las consultas se hacen usando HQL que es la sigla de Hibernate Query Language,
que es un lenguaje de consulta sobre objetos, a diferencia de SQL que se aplica sobre entidades
de bases de datos.
Criteria es una API que permite realizar consultas generales de una forma sencilla, que por atrs
usa tambin HQL. Es como si fuera un asistente de consultas HQL que se realizan de forma ms
sencilla
En la lnea donde se crea criteria vemos que le pasamos como parmetro la Clase Persona, es
decir las consultas que haga criteria se harn sobre la Clase Persona
Podemos usar la Clase Order para indicar que el resultado se ordene por algn atributo de la
clase Persona
Veamos el mtodo GETPERSONA

Vemos que es similar al getAll ya que usa Criteria. La novedad es el uso de la Clase Restrictions.
Restrictions es una clase con mtodos para indicar que un atributo sea mayor, menor, igual, etc. En
este caso indicamos que el atributo idPersona sea igual al valor de idPersona que viene como
parmetro en el mtodo.
Nota: En este mtodo asumo que si va a existir una persona con ese nmero. Se podra antes
verificar que exista el mismo. Por ejemplo usando otro mtodo que devuelva true si existe, o
verificando que exista y almacenando el mismo en una variable, etc

En las siguientes clases vamos a usar hibernate para los casos de relaciones de tablas 1-n y n-n y
veremos otras caractersticas de Criteria. Incluso si podemos veremos algo de HQL. Espero les sirva
este archivo

Ariel Alejandro Vega. Prof. Adjunto

15