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