spring与Hibernate整合后的延迟加载问题

ceilei9527 2009-04-13 09:38:47
我用了OpenSessionInViewInterceptor报错org.hibernate.HibernateException: collection is not associated with any session,然后又用OpenSessionInViewFilter还是报同样错误,请求终极解决方案,高手帮帮忙!
...全文
1066 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
seablue_xj 2009-04-14
  • 打赏
  • 举报
回复
LZ,spring在每一次完成之后都会关闭相应的 Session,如果你使用的是延迟加载,那么就需要注意Session关闭的时间,因此,如果一定要使用到延迟加载的话,那么只有在Session关闭之前将 所需要的数据 load进来,即,在同一个事务下或者 在 相同的 session不同的事务下。
Spring具体事务的开启与关闭是通过spring的事务拦截器来实现的,具体的开启时间和关闭时间,是当 执行到这个方法和退出 这个方法的时候,你可以参考一下spring的官方文档。
小霍夫 2009-04-14
  • 打赏
  • 举报
回复
关于session 我也很想了解..老是报session was closeed !
spring重新配置事务管理,将session与具体的事务相关联 怎么配.!
邓臻昊 2009-04-14
  • 打赏
  • 举报
回复

import org.hibernate.FlushMode;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.SessionFactoryUtils;

public class OpenSessionInViewFilter extends org.springframework.orm.hibernate3.support.OpenSessionInViewFilter {

/**
* we do a different flushmode than in the codebase
* here
*/
protected Session getSession(org.hibernate.SessionFactory sessionFactory) throws org.springframework.dao.DataAccessResourceFailureException {
Session session = SessionFactoryUtils.getSession(sessionFactory, true);
session.setFlushMode(FlushMode.COMMIT);
return session;
}
/**
* we do an explicit flush here just in case
* we do not have an automated flush
*/
protected void closeSession(Session session, SessionFactory factory) {
session.flush();
super.closeSession(session, factory);
}
}

用这个类替换你的OpenSessionInView,在web.xml中,如果用到了struts2,记得把OpenSessionInViewFilter的映射放到FilterDispatcher的前面
zyr860122 2009-04-14
  • 打赏
  • 举报
回复
这个问题确实难搞,设置为fetch="select" lazy="false"倒是可以解决,但是项目数据一多就影响速度!!
chenleicom 2009-04-13
  • 打赏
  • 举报
回复
如果那个里面的类没错 那就写个filter类 在到filter类里的dofilter()方法里判断session
chenleicom 2009-04-13
  • 打赏
  • 举报
回复
能把继承这个父类(OpenSessionInViewFilter)的类给我们看?
ceilei9527 2009-04-13
  • 打赏
  • 举报
回复
请问楼上的可不可以给个具体点的例子啊?
lnjey 2009-04-13
  • 打赏
  • 举报
回复
spring里的hibernateDaoSupport里采用了回调方式,每个数据库方法都置于一个session中,方法结束了,session也就关闭了,如果采用延迟加载,在方法之外在读collection,就会报异常。建议用spring重新配置事务管理,将session与具体的事务相关联。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧