Hibernate + Spring + Annotations


Spring + Hibernate. Una combinación que reduce ampliamente el tiempo de desarrollo. Spring provee un soporte muy amplio para Hibernate. En particular, tiene implementaciones de DAO que ofrecen variadas utilidades para acceder al Hibernate  Session.

La clase HibernateDaoSupport

Spring provee la clase HibernateDaoSupport, la cual implementa todas las funcionalidades de Hibernate y ademas implementa las buenas prácticas que desarrolladores inexpertos suelen pasar por alto, como el tratamiento de transacciones, apertura y cierre de seciones automáticamente, entre otras. Todas ellas listas para implementar en nuestros DAO mediante el método getHibernateTemplate().

HibernateTemplate

En particular, uno de los métodos más útiles que provee es getHibernateTemplate(). Este método devuelve un template con varios métodos útiles, que simplifican el uso de Hibernate en los DAOs. Estos métodos suelen encapsular varias excepciones propias de acceso a datos de Hibernate dentro de una DataAccessException que hereda de RuntimeException.

DAO Hibernate + Spring IoC

La forma más simple de integrar Hibernate con Spring es crear clases que hereden de HibernateDaoSupport.

Interfaz del DAO

La interfaz del DAO es simple, y no necesita heredar ni restringir nada particular:
public interface PersonaDao {
            guardarPersona(Persona persona);
}

Ejemplo de Implementación de DAO en Hibernate

La implementación del DAO deberá extender HibernateDaoSupport.
Esta clase nos proveerá de varios métodos útiles para manipular la Hibernate Session.
public class PersonaDaoImpl extends HibernateDaoSupport implements PersonaDao {
            public void guardarPersona (Persona persona) {
                        getHibernateTemplate().save(persona);
            }
}

Ejemplo de Configuración de Dao en Hibernate

En el XML de Spring deberemos declarar el Dao y la Factory de Hibernate.
Al Dao se le asocia el factory de Hibernate del cual Spring sacará la Hibernate Session.
           

           
           
                       
                                  
                                   com/enterprise/dominio/Persona.hbm.xml
                       
           
           
                       
                                   org.hibernate.dialect.Oracle9Dialect
                       
           

Uso de la Session directamente

Es posible utilizar la Session de Hibernate directamente, a través del método getSession() que provee HibernateDaoSupport.
Cuando se pide la Session de esta forma, es fundamental: 
Session session = null;
try {
            session = getSession();
            //codigo del negocio...
}
finally {
            releaseSession(session);
}

Configuración de Hibernate con Annotations en Spring

Hibernate puede configurarse con annotations en vez de archivos XML para definir los mapeos.
Para esto se usa la clase de Spring AnnotationSessionFactoryBean.
           
                        class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
                       
                       
                                  
                                              
                                               com.enterprise.dominio.Persona
                                  
                       
                       
                                  
                                               true
                                  
                       
           

Y la clase de dominio con annotations:

package com.enterprise.dominio;

import javax.persistence.Table;
import javax.persistence.Id;
import javax.persistence.Column;
import javax.persistence.Entity;

@Entity
@Table(name = "TABLA_PERSONA")
public class Persona {
    @Id
    @Column(name = "COLUMNA_PK")
    private String documentoDeIdentidad;

    @Column(name = "NOMBRE")
    private String nombre;

    //getters and setters...
}

No hay comentarios.: