如何在Hibernate关联关系中关联对象的数据重新加载

探讨Hibernate框架中如何单独刷新多对多关联关系的一方,避免因对象变为游离状态而导致的数据不一致问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Hibernate中,存在多对多关联关系,假设A与B存在多对多关系。
此时从DAO中查询得到A,A中有B的引用集合。此时程序通过获取A对象中B的引用集合,取得了一组B的数据 然后传递到表述层,并将A存到session中。(A存到Session还有二次验证用户权限时要用)

而随着时间的推移,在页面上,我需要更新与A对应的B的数据,A对象中B的引用集合已经变成游离状态,此时获取到关于B的数据是不准确的(严格来说,获取到的数据就是第一次获取的,由于第一次获取的事务结束,该对象就已经变成游离状态)。

此时,我希望能够通过Hibernate单独重新获取B集合的信息,使A对象中的B的集合重新回到持久化状态,而A我不希望再次进行查询(该对象一般不会被改变,且仅仅作为权限验证使用)

如果我重新从DAO得到一个A的实例,固然可以达到该目的,但是这样无端端的多了一次关于A的查询;而单独获得与A相关的B的集合,我似乎只能在Service层单独写一个方法为其服务。

而当初我获得A的实例本身就是hibernate的一个代理,而非真实的A的实例。因此,我想请教各位,既然hibernate这样设计,是否存在某种方法可以让其生成的这个代理对象,单独的刷新其代理对象的某个关联对象?

此外,对象A存到session后,其关联对象B,我设置为延迟加载,等用户跳转到相应需要显示B的页面时,此时hibernate的session(不是网页请求响应中的session)已经被关闭,即使使用OpenSessionInView或者Hibernate.initialize一样无法解决这个问题,因为当时获取A的那个request已经结束,无论如何Session都已经被关闭。在这种场景下,是不是我可以认为,A对B的关联关系,我其实并用不到,在需要B的数据时,我依旧只能再次手动的去查询?

感谢各位的答复!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值