小弟,在做一个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>