首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Hibernate延迟加载的简单解决办法

2012-10-08 
Hibernate延迟加载的简单解决方法最近在做一个项目,数据持久层这块用了hibernate。之前学过后就没怎么用过,

Hibernate延迟加载的简单解决方法

最近在做一个项目,数据持久层这块用了hibernate。之前学过后就没怎么用过,一直在用IBATIS。在整合spring security的时候碰到了“no session,or session was closed”,因此在网上找找好的解决方案。

?

现在一般比较常用的应该就是配置opensessioninview了,但是这个东西对性能的损耗感觉太大了,因为毕竟需要用到延迟加载的那些数据的时候并不多,可以说很少。就为了这个而把所有的所有的session保持到页面请求结束,是得不偿失的。

?

我们配置延迟加载的目的就是为了优化性能,在需要的时候去查询数据,不需要的时候就不去查询。出现“no session,or session was closed”这种错误的时候应该就是我们需要这些数据,而这些数据为空的时候。那在session关闭前让hibernate获取这些数据不就可以了吗。我们一般将业务逻辑写在service中,在service中调用dao的方法,给service的方法配置事物。

应此,我们可以service的方法里面控制hibernate,让其加载数据。

比如:

?? public SecUser getUserWithRole(String userName) {
??????? SecUser user = userDAO.getUser(userName);
??????? if (user != null) {
??????????? user.getRoleSet().size();//这里直接调用一下权限集合的size方法,让hibernate加载role数据。
??????? }
??????? return user;
??? }

这样便可以简单的避免session关闭的异常,而且不会影响hibernate对session的管理。

?

以上是一些个人的想法,如果有问题请各位大侠拍砖指正。

?

热点排行