Hiberante中LAZY的疑惑

本文探讨了Spring Security中用户登录时如何处理角色和资源的懒加载问题。通过使用left join fetch一次性获取所有权限资源,避免了因OpenSessionInViewFilter导致的session关闭问题。
摘要由CSDN通过智能技术生成

用户User与Role,Resource关联都是lazy,而使用Spring Security时,用户登陆成功需要预先取得User的所有权限资源,项目的写法是:

List<User> userList = userDAO.find("select distinct u FROM User u left join fetch u.roles r left join fetch r.resources s where u.name=? and u.enabled = 1", userName);

 

另我迷惑不解的是,是LAZY就是用户在需要角色资源时,就直接可以取到,因为我们配置了OpenSessionInViewFilter,为什么还要在取用户时还要用left join fetch去取角色和资源,

 

10.1那天无聊时想起,openSessionViewFilter是指jdbc session与http request的生命周期同步,从一个请求开始到返回页面时openSessionView会保持数据库连接打开,页面处理完成后当前数据库session关闭。

 

而我所看到的User如果不用left join fetch则登陆成功后,一个请求完成则当前数据库连接关闭,当然你在后面使用LAZY取角色和资源时出现session已经关闭的错误。到这里就知道要用left join fetch一次性将所有角色资源对象取到。

 

看书更多需要思考和实践!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值