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的管理。

 

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值