在UI中使用Hibernate对象图之前加载Hibernate对象图的最佳方法是什么?

时间:2008-09-17 04:02:01

标签: java hibernate

情况如下:

  • 你有一个Hibernate上下文 有一些懒惰的对象图 加载定义。
  • 你想用 UI中的Hibernate对象为 无需复制数据 某处。
  • 有不同的用户界面 需要不同的上下文 数据量。
  • 数据也是如此 大到急切加载整个 每次都是图表。

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

任何帮助。

3 个答案:

答案 0 :(得分:2)

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

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

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

在那里,您可以为客户提供所需的一切。最好事先知道当前操作需要什么。通过这种方式,您可以避免不必要的数据库访问。(团队中的新开发人员通常会执行此操作 - 调用属性,而不是意识到它实际上是对数据库的调用)

答案 1 :(得分:1)

如果它是一个webapp而你正在使用Spring,那么OpenSessionInViewFilter可以解决你的问题。

答案 2 :(得分:1)

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

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

初始化所需的关联

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