Programación Orientada a Objetos 2009– Fac de Ingeniería – UNJu Clase 1 de Hibernate
Ariel Alejandro Vega. Prof. Adjunto 1
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 operación 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 configuración para usarlo. En general hay una tendencia a
usarlo en la programación Java Web (J2EE) sin embargo se puede aplicar sin ningún inconveniente en
Java Desktop (J2SE aplicado a Swing).
Más aún usando Netbeans la configuración resulta muy fácil 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 (botón derecho sobre el nombre del proyecto, opción Propiedades) y Agregaremos la
biblioteca del Hibernate.
Nota: Podemos realizar esta operación sobre el proyecto apu san pedro. Yo lo hago en un nuevo
proyecto para que quede más claro.
1
2
3
Programación Orientada a Objetos 2009– Fac de Ingeniería – UNJu Clase 1 de Hibernate
Ariel Alejandro Vega. Prof. Adjunto 2
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.
Debería quedar la sección Libraries conformada como lo representa la siguiente pantalla
1
2
3
Programación Orientada a Objetos 2009– Fac de Ingeniería – UNJu Clase 1 de Hibernate
Ariel Alejandro Vega. Prof. Adjunto 3
Es decir se ve que están agregados el conjunto de archivos de hibérnate y el driver JDBC de Oracle
Paso 3: Configurar la gestión del acceso a la base de datos para que lo realice Hibernate
En clases anteriores vimos que podíamos gestionar el acceso a base de datos usando una Clase java
(Conexión.java) en la cual registrábamos el driver y luego configurábamos como conectarnos a la base
de datos.
Usando NetBeans para hibernate esta operación la podemos realizar mediante un asistente.
Primero para seguir respetando el Patrón DAO creamos el paquete dao de tal forma que la organización
quede así
Luego seleccionamos el paquete dao, hacemos botón derecho, elegimos la opción nuevo y por último la
sub opción otro.
Programación Orientada a Objetos 2009– Fac de Ingeniería – UNJu Clase 1 de Hibernate
Ariel Alejandro Vega. Prof. Adjunto 4
Con lo cual se abrirá esta pantalla, en la cual elegimos la categoría 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 podríamos indicar a que base de datos corresponde cada archivo de configuración. Por
lo tanto para este caso lo que hacemos es saltar a la siguiente pantalla, en la cual debemos elegir una
conexión a base de datos. Si ya existe, solo debemos seleccionarla, sino elegimos crear una nueva, tal
como lo muestra la siguiente pantalla
1
2
Programación Orientada a Objetos 2009– Fac de Ingeniería – UNJu Clase 1 de Hibernate
Ariel Alejandro Vega. Prof. Adjunto 5
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 información que habíamos colocado en nuestra clase
Conexión.java (OracleConnection.java en la última versión).
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.
Programación Orientada a Objetos 2009– Fac de Ingeniería – UNJu Clase 1 de Hibernate
Ariel Alejandro Vega. Prof. Adjunto 6
También se puede observar que cuando eligen un esquema Netbeans intenta establecer la conexión con
los parámetros definidos en la pantalla anterior a esta. Si lo logra se visualiza la legenda Connection
established (Conexión Establecida)
Cuando se ha establecido la conexión y se acepta, volvemos a la pantalla donde establecíamos la
conexión, en donde se muestra nuestra conexión, quedando almacenada en Netbeans para posteriores
proyectos y además 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
relación 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 información necesaria para establecer la conexión a la base de datos.
Si elegimos la opción XML como lo indica la pantalla anterior podremos ver el contenido del archivo xml
Programación Orientada a Objetos 2009– Fac de Ingeniería – UNJu Clase 1 de Hibernate
Ariel Alejandro Vega. Prof. Adjunto 7
Los archivos XML se han convertido en un estándar muy usado para el intercambio de información y
configuración de aplicaciones, de reglas, de formatos de solicitud de requerimientos a través 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.
Básicamente para entender este archivo fíjense que hay nombres llamados property cuyo nombre están
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 información queda en el medio del inicio y fin del tag
Entonces sin entrar en mayor profundidad, los valores claves están definidos en tags que hibernate ya
tiene definidos con un nombre específico 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, modificación o consulta. Hay varias formas de hacer esto. Netbeans nos
genera en forma automática 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
1
2
Programación Orientada a Objetos 2009– Fac de Ingeniería – UNJu Clase 1 de Hibernate
Ariel Alejandro Vega. Prof. Adjunto 8
Entonces se genera la Clase HibernateUtil.java que tiene la siguiente forma
Ahora debemos hacer un pequeño cambio. HibernateUtil.java busca hibernate.cfg.xml en la raíz de
nuestra aplicación pero nosotros hemos alterado esto colocando este archivo en el paquete dao.
Para modificar esto en el método configure de AnnotationConfiguration debemos pasarle la nueva
ubicación (línea 24 del código)
Entonces esa línea quedaría así
De esta forma no saltará ningún 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 veníamos trabajando. Luego
volvemos a crear un archivo de la categoría Hibernate, solo que elegimos la opción Hibernate Mapping
Files and POJOs from Database
Programación Orientada a Objetos 2009– Fac de Ingeniería – UNJu Clase 1 de Hibernate
Ariel Alejandro Vega. Prof. Adjunto 9
Esta opción 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.
Programación Orientada a Objetos 2009– Fac de Ingeniería – UNJu Clase 1 de Hibernate
Ariel Alejandro Vega. Prof. Adjunto 10
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 están tildados Domain Code (.java): Esta opción es la que creará la clase
Personas.java
• También está tildada Hibernate XML Mappings (.hbm.xml): Esta opción 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.
Programación Orientada a Objetos 2009– Fac de Ingeniería – UNJu Clase 1 de Hibernate
Ariel Alejandro Vega. Prof. Adjunto 11
Veamos la clase Personas.java
Como se ve esta clase es simplemente un Java Bean. No harían falta mayores explicaciones. Salvo que
para la convención que venimos manejando el nombre Personas.java no sería del todo correcto.
Por eso modificaremos el nombre de la clase a Persona.java
Ahora veamos el archivo Personas.hbm.xml
Programación Orientada a Objetos 2009– Fac de Ingeniería – UNJu Clase 1 de Hibernate
Ariel Alejandro Vega. Prof. Adjunto 12
Bien aquí debemos detenernos a analizar cada línea
El mapeo de la Clase Persona.java con la Tabla Personas empieza en la línea 5 y finaliza en la
línea 18 con el tag <hiernate-mapping>
La línea 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 líneas 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 referirán 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 opción es que el archivo de mapeo está en el paquete
dominio. Lo correcto sería que esté en otro paquete.
Lo que haremos entonces es crear el paquete hibernate y luego moveremos con la opción refactor el
archivo Personas.hbm.xml a ese paquete, entonces debería quedar así
Ahora fijémonos en nuestro archivo hibernate.cfg.xml
Programación Orientada a Objetos 2009– Fac de Ingeniería – UNJu Clase 1 de Hibernate
Ariel Alejandro Vega. Prof. Adjunto 13
Fijarse que en la línea 10 se agregó el tag <mapping>. Esto le sirve al archivo para saber dónde está el
archivo de mapeo. Este tag lo agregó Netbeans al crear el archivo Personas.hbm.xml.
Como usamos la opción refactor para mover el archivo esta línea refleja este cambio, pero es una buena
actitud fijarse si el IDE hizo lo que tenía 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 método INSERT
Programación Orientada a Objetos 2009– Fac de Ingeniería – UNJu Clase 1 de Hibernate
Ariel Alejandro Vega. Prof. Adjunto 14
Como se ve el método UPDATE
Como se ve el método DELETE
Se ve que todos estos métodos 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
servía, aquí está la razón)
Como se ve el método GETALL
Programación Orientada a Objetos 2009– Fac de Ingeniería – UNJu Clase 1 de Hibernate
Ariel Alejandro Vega. Prof. Adjunto 15
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 atrás
usa también HQL. Es como si fuera un asistente de consultas HQL que se realizan de forma más
sencilla
En la línea donde se crea criteria vemos que le pasamos como parámetro la Clase Persona, es
decir las consultas que haga criteria se harán sobre la Clase Persona
Podemos usar la Clase Order para indicar que el resultado se ordene por algún atributo de la
clase Persona
Veamos el método 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 métodos 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
parámetro en el método.
Nota: En este método asumo que si va a existir una persona con ese número. Se podría antes
verificar que exista el mismo. Por ejemplo usando otro método 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 características de Criteria. Incluso si podemos veremos algo de HQL. Espero les sirva
este archivo