Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在hibernate中何时使用延迟加载/快速加载?_Java_Hibernate_Lazy Loading - Fatal编程技术网

Java 在hibernate中何时使用延迟加载/快速加载?

Java 在hibernate中何时使用延迟加载/快速加载?,java,hibernate,lazy-loading,Java,Hibernate,Lazy Loading,我相信使用Hibernate加载对象只有两种方式,一种是惰性加载,另一种是急切加载。延迟加载有它自己的优点,它不是加载很多对象,而是只在您需要它们的时候加载。我还了解到,如果要强制加载对象的所有子对象,只需调用parent.getChildren().size()。假设我们有以下对象 @Entity public class Customer{ public Set<Order> order; } @Entity public class Order{ } @实体 公共类客户{

我相信使用Hibernate加载对象只有两种方式,一种是惰性加载,另一种是急切加载。延迟加载有它自己的优点,它不是加载很多对象,而是只在您需要它们的时候加载。我还了解到,如果要强制加载对象的所有子对象,只需调用
parent.getChildren().size()
。假设我们有以下对象

@Entity
public class Customer{
public Set<Order> order;
}

@Entity
public class Order{
}
@实体
公共类客户{
公共秩序;
}
@实体
公共阶级秩序{
}
假设我们的系统中有订单的客户,订单可能不止一个,甚至可能为空。所以我的问题是,在这种情况下,总是使用渴望加载不是更好吗?我们需要与客户相关的订单的尺寸或一些信息。在这种情况下使用延迟加载有什么好处,有什么好处吗

我正在尝试了解在哪里使用延迟加载和在哪里使用快速加载,非常感谢您的见解。

这完美地回答了您的问题

延迟加载用于相关实体大小巨大的情况,而不是每次都需要获取

由于每次加载主实体时都会加载关系,因此应将EAGER与适当的分析结合使用

因此,如果关系对于业务逻辑计算是绝对必要的,那么您应该考虑使用渴望加载;延迟加载将适用于大多数情况,并提供较少的性能问题

我试图理解在哪里使用延迟加载以及在哪里使用延迟加载 渴望加载,高度赞赏您的洞察力

以下是一些想法:

1) 如果您总是要使用某些东西(当然),您可以立即加载它。
2) 与1相关,如果您几乎永远不会使用某个东西,请懒散地加载它。
3) 当涉及大型集合时,延迟加载往往更有用。
4) 急切地加载内容将减少与会话相关的错误,但可能会影响性能。
5) 对于复杂的数据模型和/或大型数据库,您将看到应用程序在负载下如何调整策略。
6) 第一次做对很难。做自己觉得合适的事,必要时不要害怕改变。
7) 对于大型数据集,您可能最终会编写定制的hql/查询,其中默认映射可以被覆盖,因此懒惰与渴望不会有太大关系

如果你相信#6,那么不要在计划太远的时候陷入困境,如果有必要,就改变它

根据您的具体示例,我可能会编写一组查询来访问数据(当然是由适当的业务需求驱动的)

1) 加载客户并将订单留在数据库中的查询(加载太慢),我需要获取客户信息时会调用该查询
2) 一个用于加载客户和所有订单信息的查询,用于我需要它的情况。在这种情况下,我将忽略默认映射


有了这两个查询,在我的服务层中,我就有了所需的工具,可以根据具体情况做正确的事情。

我完全同意,编写两个单独的查询要比使用惰性/急切加载好得多。感谢您澄清这一点。