情况如下:
以可配置的方式加载对象图中所有相应对象的最佳方法是什么,以便可以访问它们而无需返回数据库来加载更多数据?
任何帮助。
答案 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%正确)