Hibernate 4.2.2 y Spring 4.0.0 (SGCE2013)

Como ya confirmo la persona que nos quito dolores de cabeza de como trabajar con distintas base de datos y nos dio otros dolores de cabeza entonces me di a la tarea de terminar lo que les presentare.
Hablare específicamente de una solución con Hibernate y Spring, no me iré a lo general si no al trabajo cotidiano de todo programador. Como trabajar he integrar una solución a los problemas que se nos presentan a diario.

Hay que tomar en cuenta de que por lo regular se usa Hibernate para las aplicaciones nuevas y/o con bases de datos bien estructuradas.

Antes de entrar de lleno a esto es importante que se echen un clavado en algunos temas si no estan relacionados con ellos: inyeccion de dependencias, Spring, Hibernate, Jpa, y los que se acumulen en el camino.

Estoy armando una aplicación de prototipo y me di a la tarea de usar Hibernate 4 y la nueva versión de Spring Frameworks 4, pero con una arquitectura que me ayudara a realizar las operaciones de la forma mas simple posible.

Con algunas dificultades hice funcionar una arquitectura de cuatro capas persistencia, servicio, controlador y la vista, se puede decir que es MVC y un pilon ya que el acceso a las entities es triangular, tomo en cuenta esta arquitectura por que la aplicación pasara el rango de lo normal así como trabajo en grupo.

En la parte de persistencia la base de todo son las entidades con anotaciones JPA como se muestra en el ejemplo.
 
Todas las entidades se manejan de la misma forma.
En esta misma capa de persistencia van los DAOs aquí inicia lo interesante de todo, se necesita una clase abstracta donde se realicen todas las operaciones básicas Insert, Delete, Load, Etc.
La clase cuando se extienda recibirá entre sus parámetros La entidad y el tipo de clave primaria de la entidad En los comentarios se describen el contenido de la clase
 
De esta clase extenderán todos los DAOs para realizar las operaciones básicas de todas las entidades.Ejemplo de DAO de la entidad Usuario
 

La capa de la persistencia estará formada con la estructura anterior, No puse interfaces para no hacer mas largo el ejemplo pero si recomiendo que se usen en algunos casos, se los dejo a su imaginación :).

En la capa de servicio me ayudara a validar algunas cuestiones, poner lógica de negocio y realizar las transacciones, se formara de la siguiente forma:
 
La idea principal es que desde esta capa se manden a llamar más de un DAO y otros servicios.
La capa de controlador es la que se comunicara con la vista, procesara información del cliente y regresara la respuesta solicitada.
El esta capa podemos definir llamados a URL (@RequestMapping) en la que la respuesta puede ser a una pagina jsp o un servicio Ajax(@ResponseBody) via Get,POST u otra forma de llamado,
También podemos cachar errores con @ExceptionHandler.
 
La parte de la vista un simple jsp en donde realizara las operaciones el cliente. Solo pondré lo esencial del jsp , el resto se los dejo a su imaginación. Por lo regular para que se vea bien uso Jquery y su gran gama de plugins, bootstrap es buena opción si esperas que tu aplicación se vea bien en navegadores normales y móviles.
 
Hasta aquí lo que tiene que ver con las clases, como vimos solo usamos hibernate y JPA en la capa de persistencia el resto de la aplicación es el uso de Spring y sus diferentes comportamientos.
Veamos la parte de configuración de los xml(También se puede hacer vía Clases pero eso es otra historia) que es donde entra lo bueno y la Unión de Spring con Hibernate de forma adecuada.
Primero el web.xml

 

Este es el código del filtro que nos permite que las sesiones lleguen de forma correcta a la clase abstracta. Y que no mueran antes de nacer.

 

Veamos el applicationContext que es donde se definiran loas beans que usamos en las diferentes capas.
 
El archivo de hibernate.xml, aquí se definirá la conexión a la base de datos y la forma en la que se conectara con Hibernate.

 
Hasta aquí puedo decir que si toman como guía la configuración de Spring con Hibernate le funcionara de forma correcta.

Algo importante hibernate 4 usa entre sus dependencias classmate.jar sugiero que tomen la versión 0.8.0 las versiones anteriores a esta causan problemas al intentar crear las entities.
Voy a poner el proyecto en github para que puedan echarle el un ojo.
Espero aparte de participar en lo de SGCE apoye a algunos.
Saludos.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de avefenix_x

Sorry lo puse donde no era..

Saludos..

Imagen de AlexSnake

Lista completa de libreiras

Seria bueno que enlistes todas las librerias que ocupaste, por que como bien mencionas una que no sea compatible con las demas van a causar problemas y dolores de cabeza.

Saludos.

Imagen de ezamudio

GANADOR

Este post fue uno de los 3 ganadores, felicidades, tienes pase para SGCE2013.

Imagen de luxspes

y la liga al github?

Voy a poner el proyecto en github para que puedan echarle el un ojo.

Finalmente si lo subiste a Github?

Imagen de avefenix_x

No lo subi..

Lo tengo en la maquina de mi trabajo, y como aki me tienen bloqueado el servicio no puedo hacerlo, y aparte se me rompio mi maquina en mi casa no he hecho nada.. pero lo subo y te aviso.
Saludos.

Imagen de ezamudio

bloquean github?

En tu trabajo bloquean github? WTF????????????

Imagen de avefenix_x

asi es.... mi estimado...

Puedes ver pero para subir por alguna razon no se puede.
Es una empresa muy grande dedicada a la venta de chacharas... :). pero me toco la mala suerte de no tener internet libre.. Es mas no digas nada por que bloquean javamexico jajajajaja.
Saludos.

Internet Bloqueado

Chale, yo si de plano tengo bloqueado todo en mi chamba de hecho nomas tengo correo (espero no verme tan patético). En fin, en mis ratos libres trato de programar algo de lo que leo o veo (bueno, eso cuando podía compartir internet de mi cel a la compu ). Recuerdo que debido a esta publicación me puse a ver que había cambiado en Hibernate y Spring, pero como que no encontré mayor diferencia a como anteriormente lo había utilizado.

En fin sin mas rollo, les dejo el proyecto que hice en ese tiempo que leí esta publicación.