情况是这样的:
- 你有一个带有对象图的Hibernate上下文,它定义了一些延迟加载。
- 您希望在UI中使用Hibernate对象,而无需在某处复制数据。
- 有不同的UI上下文需要不同数量的数据。
- 数据太大,无法每次都加载整个图表。
以可配置的方式加载对象图中所有适当对象的最佳方法是什么,以便可以访问它们而无需返回数据库来加载更多数据?
任何帮助。
假设您拥有客户,并且在某一时刻您必须处理他的订单,并且他可能会为他的订单获得奖金。
然后我会定义一个具有流畅界面的存储库,这将允许我说出类似的内容:
new ClientRepo().LoadClientBy(id)
.WithOrders()
.WithBonus()
.OrderByName();
在那里,您可以为客户提供所需的一切。 最好事先知道当前操作需要什么。 通过这种方式,您可以避免不必要的数据库访问。(团队中的新开发人员通常会执行此操作 - 调用属性,而不是意识到它实际上是对数据库的调用)
如果它是一个webapp而你正在使用Spring,那么OpenSessionInViewFilter可以解决你的问题。
我们在项目中使用的方法是为您拥有的每个视图创建服务。 然后,视图将获取此特定视图所需的子图,并始终尝试减少发送到数据库的sqls数。 因此,我们使用大量连接来获取n:1关联对象。
如果您使用的是直接连接到数据库的2层桌面应用程序,则可以随时保留附加的对象并随时加载其他数据。 否则,您必须将其重新连接到会话并使用Hibernate.initialize(Object entity, String propertyName)
初始化所需的关联。
(内存不足,可能不是100%正确)