No es un bug, es una característica no documentada

martes, 26 de enero de 2016

Instalación y configuración de Hibernate en Eclipse

21:10 Posted by Inazio Claver , 29 comments
Hibernate es una herramienta de mapeo objeto – relacional de software libre para la plataforma Java (y para .Net también pero llamándose NHibernate).

Hibernate nos facilita el mapeo de atributos entre una base de datos relacional tradicional, como puede ser una basada en MySQL por ejemplo, y el modelo de objetos de una aplicación, mediante archivos XML o anotaciones en los beans de las entidades que permiten establecer estas relaciones.

Es decir, busca solucionar el problema de la diferencia entre los dos modelos de datos que coexisten en una aplicación: El que usa la memoria del ordenador, que estará orientado a objetos, y el usado en las bases de datos, modelo relacional.
Se “monta” una capa intermedia que permite manipular la información de la base de datos operando sobre objetos, con todas las características que tiene la programación orientada a objetos.

Convertirá los datos en tipos utilizados por Java y definidos por SQL, generará las sentencias SQL liberando al desarrollador de su manejo manual y mantendrá la portabilidad entre todos los motores de bases de datos, eso sí, con el coste de incrementar (ligeramente) el tiempo de ejecución.

Instalar y configurar Hibernate en Eclipse

Lo primero que haremos será abrir Eclipse e ir a Help à Install new software


Añadiremos el repositorio de JBoss, que es el oficial para descargar e instalar Hibernate. En Work with escriremos la URL desde la que bajaremos Hibernate.

En mi caso estoy trabajando con Eclipse Mars así que mi URL será:
http://download.jboss.org/jbosstools/updates/stable/mars

Si fuese Neon sería:
http://download.jboss.org/jbosstools/updates/stable/neon/

Y si no es ninguna de ellas, podemos buscar nuestra versión en el directorio padre:
http://download.jboss.org/jbosstools/updates/stable/
Entramos en la carpeta que corresponda y copiamos la URL.

Hecho esto, pulsamos Add y de nombre indicaremos, por ejemplo, Hibernate.



Pulsamos OK y dejamos que se cargue el listado de software disponible. Una vez listo, elegiremos para instalar JBoss Data Services Development à Hibernate.


La instalación no tiene mayor misterio que aceptar términos de licencia y esperar a que finalice. Cuando lo haya hecho nos pedirá reiniciar, y para comprobar si se ha instalado correctamente, nos vamos a Window à Open Perspective. Si tenemos la opción de elegir la perspectiva Hibernate, es que está bien.


El siguiente paso es mera comodida para el desarrollo de Hibernate sobre MySQL. Cogeremos el conector MySQL (en mi caso mysql-connector-java-5.1.36-bin.jar) y lo llevaremos a una carpeta en la carpeta de Eclipse, para tenerlo más a mano.


A continuación definiremos el driver agregándolo como una librería propia de Eclipse. Iremos a Window à Preferences à Data Management à Driver Definition.


Pulsamos sobre Add y realizamos la siguiente configuración:

En la pestaña Name/Type elegimos el Vendor Filter MySQL, y como Database seleccionamos la versión 5.1.


Nos movemos a la pestaña JAR List para referenciar conector que hemos dejado en el anterior paso.

Ya tendremos un archivo con el conector de MySQL. Lo eliminamos (selecciona y marca Remove JAR/Zip…). Pulsa sobre Add JAR/Zip y elige el conector que dejamos en la carpeta de Eclipse.


Y aceptamos los cambios pulsando OK
.
Configurando opciones para proyecto Hibernate

Hasta aquí, los pasos son comúnes para todos los proyectos y sólo deberemos repetirlos una vez, pero a partir de ahora, todos los pasos deberemos configurarlos para cada proyecto Hibernate que iniciemos.

Creamos un proyecto de Java nuevo (el mío se llamará ProyectoHibernate1) y nos vamos, sobre las opciones del botón derecho, a Build Path à Add libraries


Elegimos el tipo de librería Connectivity Driver Definition


Y en la definición de drivers disponible marcamos MySQL JDBC Driver y pulsamos Finish.


Hecha esta conexión, ahora agregaremos las librerías Hibernate, que previamente habíamos descargado de http://hibernate.org/orm/.

Para ello nos creamos, dentro de nuestro proyecto, una nueva carpeta llamada lib yendo, sobre el botón derecho, a New à Folder



Ahora es cuando cojemos el comprimido descargado de Hibernate, lo descomprimimos y copiamos (arrastrar y soltar, por ejemplo) los .jar contenidos en la carpeta /lib/required a nuestra carpeta lib.


A continuación habrá que referenciar éstas librerías para que funcionen.

Sobre el proyecto, vamos a botón derecho à Build Path à Configure Build Path. Iremos a la pestaña Libraries y elegiremos la opción Add JARs, seleccionando todos los contenidos en la carpeta lib.


Ahora, sobre el proyecto, botón derecho y nos vamos a New à Other à Hibernate Configuration file y le indicamos que lo almacene en src del proyecto.



Pulsamos Next y procederemos a su configuración. Realmente puedes picar todo el código a mano, a través de XML, pero encuentro mucho más sencillo hacerlo así.

A lo que iba. En Session Factory name le indicaremos el nombre de nuestra sesión, por ejemplo ConexionHibernate.

En Database dialect (el ‘idioma’ que hablará nuestra base de datos) seleccionamos MySQL.
Y como Driver class elegimos com.mysql.jdbc.Driver.

La siguiente configuración, Connection URL, es para indicar la URL a la que conectarnos. Tenemos varios ejemplos, y basta con cargar uno y modificar los parámetros entre paréntesis. Yo me conectaré a una base de datos local ya predefinida, ejemplo, con lo cual puedo pasarle la URL completa directamente aquí. Si no en el campo Default Schema podría indicar la base de datos con la que arranco por defecto (o no indicar nada y realizar sin más la conexión). Por lo tanto, mi Connection URL es jdbc:mysql://localhost/ejemplo.

Y para acabar, indicaremos el usuario y contraseña con la que realizaré la conexión. En mi caso, Username root y Password lo pasaré vacío.

Y pulsamos Finish.


El siguiente paso es crear un archivo de configuración de consola. Nos vamos a New à Other à Hibernate à Hibernate Console Configuration.


Y dejamos las opciones por defecto


Cuando pulses Finish no verás el nuevo archivo, no te preocupes, pues solo es visible en la perspectiva de Hibernate.

Lo siguiente será generar un archivo para la ingeniería inversa (la que transforme los datos de la base de datos relacional en objetos POO). Vamos a New à Other à Hibernate à Hibernate Reverse Engineering File.


De nuevo, deberemos indicar la ruta donde se almacena (parent folder), marcando la carpeta src de nuestro proyecto, y el nombre lo dejamos por defecto.


Pulsamos Next y deberemos configurar que tablas queremos que traduzca a objetos. Lo primero es indicar que consola vamos a utilizar (Console Configuration). Solo tenemos una creada, ProyectoHibernate1, la que hicimos anteriormente, así que la escogemos y pulsamos Refresh.

Nos mostrará las bases de datos cargadas con sus respectivas tablas. Aquí escogemos las que queramos traducir, por así decirlo, y pulsamos en Include. Yo voy a agregar las dos de mi base de datos, así que quedaría tal que así.


Y ya, para ir acabando esta configuración inicial, deberemos indicar a Hibernate que genere el código en Java. Nos iremos a Run à Hibernate Code Generation à Hibernate Code Generation Configurations… llegando a la siguiente pantalla


Hacemos doble click sobre Hibernate Code Generation y nos aparecerá una nueva configuración.

En la pestaña Main tendremos que indicarle el nombre de esta configuración (Name). Puedes poner el que quieras, yo lo he llamado ConfiguracionCodigoProy1, porque poner solo Hola me parecía obscenamente corto.

Seleccionamos también una configuración de consola (Console configuration), que será la creada previamente, ProyectoHibernate1.

Marcamos el checkbox de Reverse engineer from JDBC Connection e indicamos la ruta de salida de los ficheros (Output directory), que será la carpeta src de nuestro proyecto, y el paquete donde lo meteremos. Puede ser cualquier nombre (o ninguno), pero yo he elegido llamar al paquete, desde la opción Package, primero.

Pulsamos sobre Setup de reveng.xml y nos aparcerá un mensaje preguntando si queremos crear un fichero nuevo o elegir uno que ya exista. Elegimos esta última opción.


Y seleccionamos el fichero que habíamos creado en pasos anteriores.


Esta pestaña quedará así


Y nos movemos a la pestaña Exporters, donde deberemos marcar las opciones:
  • Domain code (.java)
  • Hibernate XML Mappings (.hbm.xml)
  • Hibernate XML Configuration (.cfg.xml)



Aplicamos cambios y pulsamos Run.

Hecho esto, ya tenemos una configuración corercta para trabajar con Hibernate.

29 comentarios:

  1. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  2. Estupendo y genial. Me aclara muchas dudas. Gracias amigo.

    ResponderEliminar
    Respuestas
    1. A ti por comentar. Para eso está la información, para compartirla siempre ;)

      Eliminar
  3. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  4. Hola , que tal ?
    Sabes que segui los pasos tal cual pero alo ultimo cuando doy RUN me parece este mensaje:

    "lauching 'configuration.proecto.hibernate' has encounteres a problem

    org.hibernate.console.HibernateConsoleRuntimeException: Received a NoClassDefFoundError, probably the console configuration
    classpath is incomplete or contains conflicting versions of the same class"

    si me podrias ayudar te lo agradezco mucho.

    Saludos

    ResponderEliminar
    Respuestas
    1. Hola, tu problema es una incompatibilidad de versiones de Hibernate.
      Debes asegurarte de haber bajado la última versión del plugin de Hibernate (yo trabajé con Mars en este tutorial, desconozco si tu estás con
      Eclipse Neon. En cuyo caso deberás usar este enlace para bajarte el plugin:
      http://download.jboss.org/jbosstools/updates/stable/neon/

      Si no puedes comprobar todas las versiones disponibles aquí:
      http://download.jboss.org/jbosstools/updates/stable/
      Después de eso, debes comprobar que en el Hibernate Configuration File y el Hibernate Console Configuration las versiones de Hibernate coinciden y que los dropdown están seleccionados con la última versión disponible.

      Voy a actualizar el post para indicar el link correcto, no me había percatado si no llegas a escribir.

      Espero te funcione, si no seguiremos buscando solución.

      Saludos

      Eliminar
    2. A mi me mandaba un error similar, lo resolvi de la siguiente manera:
      En el ultimo paso cuando creas: Hibernate Code Generation y esta la opcion reveng.xml no le pongas nada dejalo en blanco.

      Desconozco porque el error se quita, pues tambien soy nuevo en hibernate. Pero espero ayudar como otros tantos me han ayudado en
      internet

      salu2

      Eliminar
  5. Muchas gracias por tu trabajo !

    ResponderEliminar
  6. Hola Jose Ignacio, primero darte las gracias por compartir la información y segundo, tengo el mismo problema que el compañero Jaime. Utilizo Eclipse Mars y descargué Hibernate desde el enlace que facilitaste. Las versiones de Hibernate Configuration File e Hibernate Console Configuration es la misma, la 5.1. Y la versión de Hibernate que descargué para importar los jars de la carpeta lib es la version 5.2.6.Final.
    ¿Debería haberme descargado la 5.1.3.Final en lugar de la 5.2.6.Final? Quizás sea ese el problema.
    Gracias por compartir!

    ResponderEliminar
    Respuestas
    1. En este caso también podría deberse al mismo problema, ya que tanto la versión de los jar importados como librerías y las versiones puestas en la configuración de Hibernate deben coincidir.
      La verdad que desconozco si hay que modificar algún extra de la configuración de Eclipse con el salto a la versión 5.2.x porque no he realizado ninguna prueba, pero si no se soluciona usando la versión 5.1, puedes revisar también que tu sistema cumple los requisitos para emplear Hibernate.
      -> Java 8
      -> JDBC 4.2

      Una última opción si quieres emplear la 5.2 y en la pantalla de configuración no te sale esa versión es generar la configuración a mano. Puedes seguir la documentación oficial: http://docs.jboss.org/hibernate/orm/5.2/quickstart/html_single/

      Eliminar
  7. Muchísimas gracias, Jose Ingacio. Es todo un placer encontrar aportes de gente como tú.
    ¡Suerte!

    ResponderEliminar
  8. No me aparece la opción MySql al importar las librerias :(
    Alguna idea?

    ResponderEliminar
    Respuestas
    1. Si no te aparece en ese caso no te preocupes. Solo elije la pestaña Add JAR/Zip y selecciona el JAR que pusiste en la carpeta de Eclipse.
      Cuando referencies esa ruta podrás seguir trabajando

      Eliminar
  9. no me aperecen las tablas al darle refresh donde las debo crear estoy en la parte de "configure tables filter" o en donde debo de crear las tablas

    ResponderEliminar
    Respuestas
    1. Asegurate de haber seguido correctamente los pasos anteriores y de que estás usando la consola que se ha configurado previamente.
      Si sigue sin funcionar, deberás comprobar que puedes realizar consultas a tu servidor de bases de datos, porque es posible que lo que te esté fallando sea la conexión con el mismo.
      Puedes hacerlo creando una pequeña clase que te haga un simple select.
      Si todo eso te funciona y sigues con el mismo problema, vuelve a escribir diciendo que configuración y que versión de Hibernate y SQL tienes y tratamos de resolverlo.

      Saludos

      Eliminar
  10. Saludos José! Muy buen tutorial, solo que en mi ecplipse no me aparece la opción "Hibernate Code Generation", sólo aparece " Hibernate Console Configuration". Sabes a qué se debe esto?

    ResponderEliminar
    Respuestas
    1. Esa opción solo está disponible en la perspectiva de Hibernate. Si estás en perspectiva Java no la podrás ver a. O ser que vayas, en preferencias, a:
      Customize perspective (current perspective) -> Command groups availability y marques el check de Hibernate Code Generation

      Eliminar
  11. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  12. Muchas gracias José, funciono impecablemente en eclipse Luna, por el tema de las dependencias las solvente con Maven.

    ResponderEliminar
    Respuestas
    1. Sí, hiciste bien. Sin duda es mucho mejor así que manualmente, pero de cuando escribí esta entrada ni siquiera sabía lo que era Maven XD

      Eliminar
  13. Woo!!! por fin alguien que explica a la perfección. Mil Gracias, me funcionó perfecto.

    ResponderEliminar
    Respuestas
    1. Gracias a ti por comentar. Me alegra que te fuese útil :)

      Eliminar
  14. Hola.
    Estoy con Eclipse Photon.
    Al intentar crear una Hibernate Console Configuration me da el error Classpath must be ser or restore to default y no me deja crearlo.
    Voy a la pestaña classpath y lo restauro pero sigue sin dejarme.
    Probé a introducir el conector mysql y las librerías de hibernate pero tampoco lo soluciono.
    Muchas gracias,

    ResponderEliminar
    Respuestas
    1. Hola!

      El error que me comentas se produce cuando no has importado correctamente el JAR externo al classpath.
      Asegurate de que el paso de "Nos movemos a la pestaña JAR List para referenciar conector que hemos dejado en el anterior paso.

      Ya tendremos un archivo con el conector de MySQL. Lo eliminamos (selecciona y marca Remove JAR/Zip…). Pulsa sobre Add JAR/Zip y elige el conector que dejamos en la carpeta de Eclipse." lo estás llevando a cabo correctamente.
      Si es así, vuelve y buscamos otras soluciones.
      Saludos! :)

      Eliminar
  15. gracias, me ha sido de gran ayuda

    ResponderEliminar
  16. Gracias, perfecto a la primera. Había probado otros tutos y na de na.

    ResponderEliminar