如何在呈现页面之前保持Hibernate会话处于打开状态

时间:2010-06-09 13:15:34

标签: hibernate spring lazy-loading oracle-adf

我遇到以下问题:

  • 我正在使用Oracle ADF作为我应用的视图和控制器。
  • 使用OpenSessionInViewFilter,我拦截请求并打开一个Hibernate的Session,并在bean的方法完成后立即关闭。

我需要的是在呈现页面之前保持会话打开,因为在我的JSP中使用从数据库加载的对象的惰性属性。

例如:

当我输入index.jspx时,执行IndexBean#main():

public class IndexBean{
    private DBObject myDBObject;
    public String main(){
        this.myDBObject = this.myDAO.loadObjectFromDB();
        return null;
    }
}
index.jspx中的

我有:

...
<af:inputText value="#{myDBObject.lazyAttribute}" />
...

我希望Hibernate的Session保持打开直到af:inputText被处理。

这可能吗?怎么样?

提前致谢

2 个答案:

答案 0 :(得分:1)

最后,我解决了我的问题。

OpenSessionInViewFilter它正常工作。

我正在使用的<af:table>组件出现问题...奇怪的是<af:table>创建了一个新请求。这个新请求正在关闭并创建一个新的Hibernate Session。

答案 1 :(得分:0)

我建议您将视图与模型分离,并消除延迟加载。在呈现页面之前为页面提供所需的所有数据。如果获取其他数据确实是一个很大的性能影响,那么请考虑重新设计应用程序以单独呈现该数据。