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