could not initialize proxy - no Session解决办法

could not initialize proxy - no Session错误


报错出现情况

使用struts+hibernate+springMVC时,使用标准查询Criteria进行联级查询抛出此错误


    //学生实体类
    public class Student {

         private Integer id;
         private String name;
         private String password;
         //班级对象  和学生一对多关系
         private Classes classes = new Classes();
         //课程集合  和学生多对多关系
         private Set courses = new HashSet();
    }
    //dao层方法:标准查询会自动查出学生所在班级和所选课程
    public List getList() {
        return getCurrentSession().createCriteria(Student.class).list();
    }

原因分析(个人理解)

  1. spring的配置文件配置了自动管理事务
  2. 所以在查询完学生表中的数据时,Hibernate会去自动查询关联的其他俩表的数据(班 级和课程信息)
  3. 查询都是依靠session对象执行的。
  4. 但是查完学生表,spring的事务管理会自动将session关闭。
  5. 所以导致后俩个操作无法完成,缺少session。
  6. 故报异常could not initialize proxy - no Session(无法初始化代理对象-没有session)
<property name="hibernateProperties">
    <props>
        <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialectprop>
        <prop key="hibernate.show_sql">trueprop>
        <prop key="hibernate.hbm2ddl.auto">updateprop>
        
        
        <prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContextprop>
    props>
property>

<bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory">property>
bean>

<tx:annotation-driven transaction-manager="txManager"/>

业务处理层注解方式添加了spring自动管理事务

@Transactional
@Service("xkService")
public class XkService {
        省略具体内容
}

解决办法

在web.xml中配置用于开启事务的过滤器

  <filter>  
      <filter-name>hibernateFilterfilter-name>  
      <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilterfilter-class>  
  filter>
  <filter-mapping>
    <filter-name>hibernateFilterfilter-name>
    <url-pattern>/*url-pattern>
  filter-mapping>

你可能感兴趣的:(问题解决记录)