1

情况是这样的:

  • 您有一个 Hibernate 上下文,其中包含一个定义了一些延迟加载的对象图。
  • 您想在 UI 中按原样使用 Hibernate 对象,而不必在某处复制数据。
  • 有不同的 UI 上下文需要不同数量的数据。
  • 数据太大,每次都急于加载整个图表。

以可配置的方式在对象图中加载所有适当的对象,以便无需返回数据库加载更多数据即可访问它们的最佳方法是什么?

任何帮助。

4

3 回答 3

2

假设您有客户,并且在某一时刻您必须处理他的订单,也许他的订单有奖金。

然后我会定义一个具有流畅界面的存储库,这将允许我说类似的话:

new ClientRepo().LoadClientBy(id)
                .WithOrders()
                .WithBonus()
                .OrderByName();

那里有你需要的一切的客户。您最好提前知道当前操作需要什么。这样您可以避免不必要的数据库访问。(您团队中的新开发人员通常会这样做 - 调用属性而不知道它实际上是对数据库的调用)

于 2008-09-17T04:19:52.180 回答
1

如果它是一个 web 应用程序并且您使用的是 Spring,那么 OpenSessionInViewFilter 可能是您的问题的解决方案。

于 2008-09-17T05:00:17.997 回答
1

我们在项目中使用的一种方法是为您拥有的每个视图创建一个服务。然后视图获取此特定视图所需的子图,始终尝试减少发送到数据库的 sql 数量。因此,我们使用大量连接来获取 n:1 关联对象。

如果您使用的是直接连接到数据库的 2 层桌面应用程序,您可以只保留附加的对象并随时自动加载其他数据。否则,您必须将其重新附加到会话并初始化您需要的关联Hibernate.initialize(Object entity, String propertyName)

(内存不足,可能不是 100% 正确)

于 2008-09-17T20:12:01.863 回答