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) {
SecUseruser=userDAO.getUser(userName);
if(user!=null){
user.getRoleSet().size();//这里直接调用一下权限集合的size方法,让hibernate加载role数据。
}
returnuser;
}这样便可以简单的避免session关闭的异常,而且不会影响hibernate对session的管理。
以上是一些个人的想法,如果有问题请各位大侠拍砖指正。