当前位置: 代码迷 >> Java Web开发 >> Struts2+Spring2.5+Hibernate3.2 could not initialize proxy - no Session,该如何处理
  详细解决方案

Struts2+Spring2.5+Hibernate3.2 could not initialize proxy - no Session,该如何处理

热度:747   发布时间:2016-04-17 10:44:47.0
Struts2+Spring2.5+Hibernate3.2 could not initialize proxy - no Session
小弟,在做一个ssh的项目遇上了could not initialize proxy - no Session问题,我看了一个上午了,还是没结果,现在在这请求大虾相助。。

情况是Employee实体类中有一个Position实体类的字段,现在我要在加载Employee时随便把Position也加载进去,不使用 lazy=false。。

Dao层代码
Java code
    public List<Employee> find(Employee condition) {        String hql = "from Employee e where 1=1 ";        Object[] values = null;        if(null!=condition){            hql += "and e.sn=? and e.password=?";            values = new Object[]{condition.getSn(),condition.getPassword()};            List<Employee> list = super.getHibernateTemplate().find(hql, values);                        for(int i=0;i<list.size();i++){                list.get(i).getPosition();//报错地点            }            return list;        }else{            return super.getHibernateTemplate().find(hql);        }            }


项目中还用了spring的声明式管理

XML code
   <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">      <!-- HibernateTransactionManager bean 需要依赖注入一个 SessionFactory bean的引用 -->      <property name="sessionFactory" ref="sessionFactory"/>   </bean>      <!-- 定义事务通知,需要指定一个事务管理器 -->   <tx:advice id="txAdvice" transaction-manager="txManager">     <!-- 定义属性,声明事务规则 -->     <tx:attributes>       <!-- 对get/find/search/query 开头的方法要求只读事务 -->       <tx:method name="get*" read-only="true"/>       <tx:method name="find*" read-only="true"/>       <tx:method name="search*" read-only="true"/>       <tx:method name="query*" read-only="true"/>       <tx:method name="add*" propagation="REQUIRED"/>       <tx:method name="del*" propagation="REQUIRED"/>       <tx:method name="update*" propagation="REQUIRED"/>       <tx:method name="do*" propagation="REQUIRED"/>       <tx:method name="*" propagation="REQUIRED"/>     </tx:attributes>   </tx:advice>      <aop:config>     <!-- 定义哪些方法应用这些规则 -->     <aop:pointcut id="serviceMethod" expression="execution(* cn.jbit.jboa.service.*.*(..))"/>     <!-- 将事务通知于引用规则的方法组合 -->     <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod"/>   </aop:config>


在web.xml中使用了OpenSessionInViewFilter

XML code
    <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>


虽然使用了OpenSessionInViewFilter,但是还是没效果。。望大虾们指点一二。。

------解决方案--------------------
程序中有个懒加载,session中是有边缘的,如果这样的话,加大session的时长。
------解决方案--------------------
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
  相关解决方案