lunes, 21 de enero de 2013

Hibernate desde 0 usando Struts 1.3.10

Hoy me topé con la necesidad de integrar Hibernate junto con Struts, y aquí os dejo unos pasos y unos buenos tutoriales

1.-Me bajé el zip con el contenido de hibernate.  https://sourceforge.net/projects/hibernate/?source=dlp  y en el eclipse, en la carpeta lib, metí los jars siguientes:
  • Los que estaban dentro de required ( hibernate-distribution-3.6.10.Final-dist\hibernate-distribution-3.6.10.Final\lib\required) : antlr-2.7.6, commons-collections-3.1, dom4j-1.6.1, javassist-3.12.0.GA, jta-1.1,  slf4j-api-1.6.1
  • Los de hibernate propiamente dicho (\hibernate-distribution-3.6.10.Final-dist\hibernate-distribution-3.6.10.Final) : hibernate3  e hibernate3testing 
  • El de JPA (hibernate-distribution-3.6.10.Final-dist\hibernate-distribution-3.6.10.Final\lib\jpa):  hibernate-jpa-2.0-api-1.0.1.Final
    • Este jar hay que meterlo para evitar la excepción Exception in thread “main” java.lang.NoClassDefFoundError: javax/persistence/EntityListeners    (solución hallada en http://technicalrecyclebin.wordpress.com/category/j2ee/hibernate/ )
2.-Metí en mi proyecto el jar de un conector de mysql, en mi caso:  mysql-connector-java-5.1.22-bin.jar

3.-Yo seguí un muy buen tutorial de creación de la aplicación, donde tras indicarte los ficheros que tienes que crear te brinda la oportunidad de dejar la prueba ejecutada
http://blog.sencide.com/2011/03/hibernate-tutorial-for-beginners.html

4.-Para ese mismo tutorial, os dejo los scripts de creación de mysql, puesto que , tuve algún error, por ejemplo, se me olvidó crear las claves primaras como autoincremental, y si no lo hacía, me salía el siguiente error:   org.hibernate.HibernateException: The database returned no natively generated identity value  o también otro que indicaba que no tenía un valor por defecto en el id.  OJO, yo le llamé a la base de datos, hibernatestruts  (con lo cual difiere del ejemplo del tutorial)

delimiter $$

CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `first_name` varchar(100) DEFAULT NULL,
  `last_name` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8$$

delimiter $$

CREATE TABLE `tasks` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) DEFAULT NULL,
  `title` varchar(100) DEFAULT NULL,
  `description` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8$$

SELECT * FROM hibernatestruts.users;

delimiter $$

CREATE TABLE `tasks` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) DEFAULT NULL,
  `title` varchar(100) DEFAULT NULL,
  `description` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8$$

SELECT * FROM hibernatestruts.users;

5.-Una vez que ejecuté como una aplicación Java el test.  Procedí a introducirlo con Struts.  Para ello, tenía una aplicación creada con el struts-blank de la versión 1.3.10, creé un Action para poder ejecutar mi código y seguí el siguiente tutorial:

http://bernabetorres.wordpress.com/2011/07/27/integracion-de-hibernate-en-struts-1-3-10/

y este

http://www.mkyong.com/struts/struts-hibernate-integration-example/


6.-Finalmente, me leí una documentación adicional

Introducción resumida:  http://hareenlaks.blogspot.com.es/2011/03/introduction-to-hibernate.html
Introducción: http://docs.jboss.org/hibernate/core/3.5/reference/en/html/tutorial.html
Lenguaje HQL:  http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html
Variado: http://viralpatel.net/blogs/introduction-to-hibernate-framework-architecture/

7.-No olvidar, una buena herramienta para el eclipse (en mi caso eclipse Juno)
http://marketplace.eclipse.org/node/420896#.UP0aLoaTrIU