我相信使用 Hibernate 加载对象只有两种方法,一种是延迟加载,一种是预先加载。延迟加载有其自身的优点,它不是加载大量对象,而是仅在需要时才加载。我还了解到,如果您想强制加载一个对象的所有子对象,您可以简单地调用parent.getChildren().size()
。假设我们有以下对象
@Entity
public class Customer{
public Set<Order> order;
}
@Entity
public class Order{
}
假设我们的系统中有客户的订单,并且订单可能不止一个,甚至为空。所以我的问题是在这种情况下总是使用急切加载不是更好吗?我们需要与客户相关的订单的尺寸或一些信息。在这种情况下使用延迟加载有什么好处,有什么好处吗?
我试图了解在哪里使用延迟加载以及在哪里使用急切加载,非常感谢您的见解。
我试图了解在哪里使用延迟加载以及在哪里使用
急于加载,高度赞赏您的洞察力。
以下是一些想法:
1)如果你总是要使用某些东西(当然),你可以立即加载它。
2)与1相关,如果你几乎永远不会使用某些东西,请延迟加载它。
3)当涉及大型集合时,延迟加载往往更有用。
4) 提前加载内容将减少与会话相关的错误,但可能会降低性能。
5) 对于复杂的数据模型和/或大型数据库,您将了解您的应用程序在负载下的表现并调整您的策略。
6) 第一次就做好是很困难的。做感觉正确的事情,必要时不要害怕改变。
7) 对于大型数据集,无论如何,您可能最终都会编写自定义 hql/查询,其中默认映射可以被覆盖,因此惰性与急切并不那么重要。
如果你相信#6,那么就不要试图制定太远的计划,并在必要时改变它。
关于您的具体示例,我可能会编写一堆查询来访问数据(当然,由适当的业务需求驱动)
1)加载客户并将订单保留在数据库中(如此延迟加载)的查询,当我需要获取客户信息时我会调用该查询
2)在我需要的情况下加载客户和所有订单信息的查询。所以在这种情况下我将忽略默认映射。
有了这两个查询,在我的服务层中,我就拥有了根据情况上下文执行正确操作所需的工具。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)