在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的数据时,我依旧只能再次手动的去查询?
感谢各位的答复!
此时从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的数据时,我依旧只能再次手动的去查询?
感谢各位的答复!