Hibernate2延迟加载问题

因为项目历史较久,一直使用的是hibernate2框架。这几日在对原先系统增加延迟加载时,发现总是报如下错误:

ERROR LazyInitializationException:? - Failed to lazily initialize a collection - no session or session was closed 

 

原本这不是一个麻烦的问题,但是因为已经使用了OSIV模式,加入了OpenSessionInViewFilter,所以更是感觉奇怪。经过研究和搜索,发现有多种原因会导致该异常。现总结如下:

 

1. 没有使用OSIV模式。关于OSIV模式可以搜索到很多内容。

2. 使用了OSIV,但是初始化配置文件时,同时使用了ContextLoadPlugin与ContextLoadListener,会导致存在两个session。可参考Robbin的一篇帖子

 http://www.iteye.com/topic/15057

3. 使用了OSIV。对于关联关系,例如一对多(A has a set of B)关系。在获取A后,调用了evict(A),会导致之后使用B进行延迟加载时可能出错(前提:Casacde.Evict)。原因是A被evict后,B会被级联,从原session上detach,从而导致hibernate找不到session去做延迟加载。

 

 

posted on 2011-05-14 18:11  daition  阅读(228)  评论(0编辑  收藏  举报

导航