OpenSesionInViewFilter

Buen día.

La razón de este post es que estuve bastante tiempo buscando una forma de no obtener la horrible "LazyInitializationException" al intentar poner elementos flojos en Hibernate utilizando Spring, ya que al delegar la creación de las sesiones a Spring, también pierdes el derecho a utilizarlas.

Entonces para aquellos que al igual que yo sufren por este mal la solución se encuentra en un filtro proporcionado por Spring : "OpenSessionInViewFilter" y se implementa asi:

import org.hibernate.FlushMode;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.dao.CleanupFailureDataAccessException;
import org.springframework.dao.DataAccessResourceFailureException;
import org.springframework.orm.hibernate3.SessionFactoryUtils;
import org.springframework.orm.hibernate3.support.OpenSessionInViewFilter;

public class HibernateFilter extends OpenSessionInViewFilter {

 @Override
 protected Session getSession(SessionFactory sessionFactory) throws DataAccessResourceFailureException {
  Session session = SessionFactoryUtils.getSession(sessionFactory, true);
  session.setFlushMode(FlushMode.AUTO);
  return session;
 }
 
 
 @Override
 protected void closeSession(Session session, SessionFactory sessionFactory) {
  try{
   if (session != null && session.isOpen() && session.isConnected()) {
    try {
     session.flush();
    } catch (HibernateException e) {
     throw new CleanupFailureDataAccessException( e.getMessage(), e);
    } catch(Exception e){}
    }
  } finally{
   super.closeSession(session, sessionFactory);
  }
 }
}

Lo agregamos al web.xml:

<filter>
        <filter-name>hibernateFilter</filter-name>
        <filter-class>
            org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
        </filter-class>

    </filter>
    <filter-mapping>
        <filter-name>hibernateFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

Y listo , no debemos preocuparnos mas por la horrible exception!