Spring 即使使用OpenSessionInViewFilter,还有另一个懒散的初始化异常

Spring 即使使用OpenSessionInViewFilter,还有另一个懒散的初始化异常,spring,hibernate,Spring,Hibernate,我在使用Spring3/Hibernate3.6和jsp的web应用程序中遇到了可怕的LazyInitializationException异常。我的web.xml中有OpenSessionInViewFilter,但我的hsSession似乎正在关闭或以某种方式失效。我还检查了我的申请没有引起任何异常 这是我的web.xml <filter> <filter-name>hibernateFilter</filter-name>

我在使用Spring3/Hibernate3.6和jsp的web应用程序中遇到了可怕的LazyInitializationException异常。我的web.xml中有OpenSessionInViewFilter,但我的hsSession似乎正在关闭或以某种方式失效。我还检查了我的申请没有引起任何异常

这是我的web.xml

   <filter>
        <filter-name>hibernateFilter</filter-name>
        <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
        <init-param>
            <param-name>sessionFactoryBeanName</param-name>
            <param-value>sessionFactory</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>hibernateFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>hibernateFilter</filter-name>
        <servlet-name>hedgebenefits</servlet-name>
    </filter-mapping>

冬眠过滤器
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
sessionFactoryBeanName
会话工厂
冬眠过滤器
/*
冬眠过滤器
对冲收益
Context.xml是:

<mvc:annotation-driven/>
<tx:annotation-driven/>
<context:component-scan base-package="com.hedgebenefits.*"/>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <property name="suffix" value=".jsp"/>
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/managerie"/>
    <property name="username" value="root"/>
    <property name="password" value=""/>
</bean>

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean id="namingStrategy" class="org.hibernate.cfg.ImprovedNamingStrategy"/>

    <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="packagesToScan" value="com.hedgebenefits.domain"/>
    <property name="dataSource" ref="dataSource"/>
    <property name="namingStrategy" ref="namingStrategy"/>
    <property name="hibernateProperties">
        <value>
            hibernate.dialect=org.hibernate.dialect.MySQLDialect
            hibernate.show_sql=true
        </value>
    </property>
</bean>

hibernate.dialogue=org.hibernate.dialogue.mysqldialogue
hibernate.show_sql=true
Jsp是:

<tr>
    The list is :
    <td>
    <c:forEach var="admin" items="${admins}">
        Admin is ${admin.username},
        <c:forEach var="sector" items="${admin.sectors}">
            sector is ${sector.name}
        </c:forEach>
    </c:forEach>
    </td>
</tr>

名单如下:
Admin是${Admin.username},
扇区为${sector.name}
服务用@Transactional注释:

@Service
@Transactional
public class AdminServiceImpl implements AdminService {


    private AdminDao adminDao;

    @Autowired
    public AdminServiceImpl(AdminDao adminDao) {
        this.adminDao = adminDao;
    }
    ...

    @Override
    public List<Admin> listAllAdmins() {
        return adminDao.listAllAdmins();
    }
}
@服务
@交易的
公共类AdminServiceImpl实现AdminService{
私人管理员;
@自动连线
公共AdminServiceImpl(AdminDao AdminDao){
this.adminDao=adminDao;
}
...
@凌驾
公共列表ListalAdmins(){
返回adminDao.listalAdmins();
}
}
道是:

@Repository
public class AdminDaoImpl implements AdminDao{

    private SessionFactory sessionFactory;

    @Autowired
    public AdminDaoImpl(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    ....

    @Override
    public List<Admin> listAllAdmins() {
        List<Admin> adminList = sessionFactory.getCurrentSession().createCriteria(Admin.class)
                .setMaxResults(5)
                .list();
        return adminList;
    }
}
@存储库
公共类AdminDaoImpl实现AdminDao{
私人会话工厂会话工厂;
@自动连线
公共AdminDaoImpl(SessionFactory SessionFactory){
this.sessionFactory=sessionFactory;
}
....
@凌驾
公共列表ListalAdmins(){
List adminList=sessionFactory.getCurrentSession().createCriteria(Admin.class)
.setMaxResults(5)
.list();
返回管理员列表;
}
}
编辑:添加控制器和堆栈跟踪

控制器为:

    @Controller
@RequestMapping(value = "/admin")
@SessionAttributes(value = "admin")
public class AdminRegistrationController {

    ...    
    @Autowired
    private AdminService adminService;

    @RequestMapping(value = "/list")
    public ModelAndView listRegisteredAdmins() {
        List<Admin> admins = adminService.listAllAdmins();
        return new ModelAndView(LIST_ADMINS.getViewName()).addObject("admins", admins);  
    }
@控制器
@请求映射(value=“/admin”)
@SessionAttributes(value=“admin”)
公共类AdminRegistrationController{
...    
@自动连线
专用AdminService AdminService;
@请求映射(value=“/list”)
公共模型和视图列表RegisteredAdmins(){
List admins=adminService.ListalAdmins();
返回新的ModelAndView(LIST_ADMINS.getViewName()).addObject(“ADMINS”,ADMINS);
}
Stacktrace是:

   org.apache.jasper.JasperException: An exception occurred processing JSP page /WEB-INF/jsp/list.jsp at line 15

12:         <td>
13:         <c:forEach var="admin" items="${admins}">
14:             Admin is ${admin.username},
15:             <c:forEach var="sector" items="${admin.sectors}">
16:                 sector is ${sector.name}
17:             </c:forEach>
18:         </c:forEach>


    Stacktrace:
        org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:521)
        org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:430)
        org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
        org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
        org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:262)
        org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1157)
        org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:927)
        org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:827)
        org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
        org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:70)
        org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
        org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    root cause

    org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.hedgebenefits.domain.Admin.sectors, no session or session was closed
        org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:383)
        org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:375)
        org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:368)
        org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:111)
        org.hibernate.collection.PersistentBag.iterator(PersistentBag.java:272)
        org.apache.taglibs.standard.tag.common.core.ForEachSupport.toForEachIterator(ForEachSupport.java:348)
        org.apache.taglibs.standard.tag.common.core.ForEachSupport.supportedTypeForEachIterator(ForEachSupport.java:224)
        org.apache.taglibs.standard.tag.common.core.ForEachSupport.prepare(ForEachSupport.java:155)
        javax.servlet.jsp.jstl.core.LoopTagSupport.doStartTag(LoopTagSupport.java:256)
        org.apache.jsp.WEB_002dINF.jsp.list_jsp._jspx_meth_c_005fforEach_005f1(list_jsp.java:149)
        org.apache.jsp.WEB_002dINF.jsp.list_jsp._jspx_meth_c_005fforEach_005f0(list_jsp.java:112)
        org.apache.jsp.WEB_002dINF.jsp.list_jsp._jspService(list_jsp.java:70)
        org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)
        org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
        org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
        org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:262)
        org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1157)
        org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:927)
        org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:827)
        org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
        org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:70)
        org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
        org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
org.apache.jasper.jaspereException:在第15行处理JSP页面/WEB-INF/JSP/list.JSP时发生异常
12:         
13:         
14:Admin是${Admin.username},
15:             
16:扇区为${sector.name}
17:             
18:         
堆栈跟踪:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:521)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:430)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javaservlet.http.HttpServlet.service(HttpServlet.java:717)
org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:262)
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1157)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:927)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:827)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
javaservlet.http.HttpServlet.service(HttpServlet.java:617)
javaservlet.http.HttpServlet.service(HttpServlet.java:717)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:70)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
根本原因
org.hibernate.LazyInitializationException:未能延迟初始化角色集合:com.hedgebenefits.domain.Admin.sectors,未关闭任何会话或会话
org.hibernate.collection.AbstractPersistentCollection.ThrowlazyiInitializationException(AbstractPersistentCollection.java:383)
org.hibernate.collection.AbstractPersistentCollection.ThrowlazyiInitializationExceptionInNotConnected(AbstractPersistentCollection.java:375)
org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:368)
org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:111)
org.hibernate.collection.PersistentBag.iterator(PersistentBag.java:272)
org.apache.taglibs.standard.tag.common.core.ForEachSupport.toForEachIterator(ForEachSupport.java:348)
org.apache.taglibs.standard.tag.common.core.ForEachSupport.supportedTypeForeachInterator(ForEachSupport.java:224)
org.apache.taglibs.standard.tag.common.core.ForEachSupport.prepare(ForEachSupport.java:155)
javax.servlet.jsp.jstl.core.LoopTagSupport.doStartTag(LoopTagSupport.java:256)
org.apache.jsp.WEB\u 002dINF.jsp.list\u jsp.\u jspx\u meth\u c\u 005fforEach\u 005f1(list\u jsp.java:149)
org.apache.jsp.WEB\u 002dINF.jsp.list\u jsp.\u jspx\u meth\u c\u 005fforEach\u 005f0(list\u jsp.java:112)
org.apache.jsp.WEB\u 002dINF.jsp.list\u jsp.\u jsp服务(list\u jsp.java:70)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javaservlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servl