浏览 3268 次
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-01-23
那么,如何在一次dao查询以后,可以不关闭session,当继续执行,对象的get方法的时候,hibernate可以继续执行相应的查询,得到由于lazy而延迟加载的数据呢???? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-01-23
首先你要确认,在Service层是不存在这种问题的。因为是在进入Service层的时候Session打开,事务开始。离开的时候提交事务,Session关闭。如果你这里出异常,那就是你错误把事务配置到Dao里头了。
Spring给出的表现层延迟加载解决方案是OpenSessionInView过滤器。只要你配置了这个过滤器,就可以在页面渲染的时候获得延迟的对象。 还有,下次这种简单查书就可以知道的问题最好发到新手那里。这里发太浅显的问题会被扣分的。 |
|
返回顶楼 | |
发表时间:2008-01-23
魔力猫咪 写道 首先你要确认,在Service层是不存在这种问题的。因为是在进入Service层的时候Session打开,事务开始。离开的时候提交事务,Session关闭。如果你这里出异常,那就是你错误把事务配置到Dao里头了。
Spring给出的表现层延迟加载解决方案是OpenSessionInView过滤器。只要你配置了这个过滤器,就可以在页面渲染的时候获得延迟的对象。 还有,下次这种简单查书就可以知道的问题最好发到新手那里。这里发太浅显的问题会被扣分的。 为什么大家用open in view就是由于楼主的问题 |
|
返回顶楼 | |
发表时间:2008-01-23
引用 Spring给出的表现层延迟加载解决方案是OpenSessionInView过滤器。只要你配置了这个过滤器,就可以在页面渲染的时候获得延迟的对象。 在页面显示我知道用OpenSessionInViewFilter,但是问题是我不是要拿到这些数据去填充表现层,而是我要另外的起一个线程去处理一些数据。 比如说我先查询到所有论坛的发帖,可能是一个List,(这是通过一个DAO查到的)。然后判断每一个帖子的回帖超过10个,就给这个帖子的owner加1分,但是当我再通过这个帖子getOwner的时候,就会报错,说session has closed. 有没有什么方法可以解决的呀???????? |
|
返回顶楼 | |
发表时间:2008-01-23
放在service层作这事
不要放在不同的service中去.... (前提你的spring用法正确,没有在dao里就把session关闭了.) |
|
返回顶楼 | |
发表时间:2008-01-23
抛出异常的爱 写道 放在service层作这事
不要放在不同的service中去.... (前提你的spring用法正确,没有在dao里就把session关闭了.) 我说的也是这个意思。我们一般使用Spring是不会在Dao层做打开、关闭和事务控制的。你的事务配置放错地方了。 |
|
返回顶楼 | |
发表时间:2008-09-28
抛出异常的爱 写道 魔力猫咪 写道 首先你要确认,在Service层是不存在这种问题的。因为是在进入Service层的时候Session打开,事务开始。离开的时候提交事务,Session关闭。如果你这里出异常,那就是你错误把事务配置到Dao里头了。 Spring给出的表现层延迟加载解决方案是OpenSessionInView过滤器。只要你配置了这个过滤器,就可以在页面渲染的时候获得延迟的对象。 还有,下次这种简单查书就可以知道的问题最好发到新手那里。这里发太浅显的问题会被扣分的。为什么大家用open in view就是由于楼主的问题 OpenSessionInViewFilter是Spring提供的一个针对Hibernate的一个支持类,其主要意思是在发起一个页面请求时打开Hibernate的Session,一直保持这个Session,直到这个请求结束,具体是通过一个Filter来实现的。 由于Hibernate引入了Lazy Load特性,使得脱离Hibernate的Session周期的对象如果再想通过getter方法取到其关联对象的值,Hibernate会抛出一个LazyLoad的Exception。所以为了解决这个问题,Spring引入了这个Filter,使得Hibernate的Session的生命周期变长。 |
|
返回顶楼 | |