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
hibernate中的延迟初始化_Hibernate_Lazy Initialization - Fatal编程技术网

hibernate中的延迟初始化

hibernate中的延迟初始化,hibernate,lazy-initialization,Hibernate,Lazy Initialization,我正在尝试学习Hibernate,我通过了Hibernate惰性初始化。我有一些关于延迟初始化的澄清。 首先,什么是所谓的延迟初始化,它做什么?第二,我应该什么时候去?接下来,我在博客中发现,使用它可以提高性能,我只需要知道如何使用它。那么,使用它有什么缺点吗?有谁能帮我理解一下延迟初始化吗?延迟初始化意味着延迟加载 简而言之—— 当您第一次需要时初始化对象,它会为您提供高性能,因为不会加载不必要的对象。” e、 g.-假设您需要有一个包含多个表的连接的记录。如果您一次获取所有表,所需时间将比仅

我正在尝试学习Hibernate,我通过了Hibernate惰性初始化。我有一些关于延迟初始化的澄清。


首先,什么是所谓的延迟初始化,它做什么?第二,我应该什么时候去?接下来,我在博客中发现,使用它可以提高性能,我只需要知道如何使用它。那么,使用它有什么缺点吗?有谁能帮我理解一下延迟初始化吗?

延迟初始化意味着延迟加载

简而言之——

当您第一次需要时初始化对象,它会为您提供高性能,因为不会加载不必要的对象。”

e、 g.-假设您需要有一个包含多个表的连接的记录。如果您一次获取所有表,所需时间将比仅获取主表所需时间更长。使用延迟加载,仅在需要时才会获取其余信息。因此,在某些情况下,它实际上是高效加载。

延迟加载蚀刻(或初始化)与即时抓取相反。hibernate中默认的延迟抓取意味着从数据库加载记录时,不会加载一对多关系子行

@Entity
@Table(name = "COMPANY")
public class Company {
...
@OneToMany(fetch = FetchType.LAZY)
private Set<Employee> employees = new HashSet<Employee>();
@实体
@表(name=“公司”)
公营公司{
...
@OneToMany(fetch=FetchType.LAZY)
私有集employees=newhashset();
请求公司记录不会返回(设置)员工,必须在另一个查询中请求这些员工

优势

  • 性能。员工仅在需要(和请求)时加载。CPU、内存、带宽方面的优势…(Java端和SQL server端)
缺点

  • 如果还需要员工,则必须执行单独的查询
请注意,对员工的查询必须在同一会话期间执行(否则著名的LazyInitializationException将不受欢迎)


包含有趣的信息。

惰性设置决定在加载父对象时是否加载子对象。您需要对父类的各个hibernate映射文件执行此设置。
Lazy=true
(表示不加载子对象)默认情况下,子对象的延迟加载为true。这确保不会加载子对象,除非通过调用父对象上的
getChild()
方法在应用程序中显式调用它们。在这种情况下,hibernate在
getChild()时发出一个新的数据库调用来加载子对象实际上对父对象调用了
。但在某些情况下,在加载父对象时确实需要加载子对象。只需将设置为lazy=false,hibernate将在从数据库加载父对象时加载子对象。示例
lazy=true
(默认值)如果用户类的Address子对象不是经常需要的,则可以将其设置为lazy。
lazy=false
,但是每当您处理在线书店的书籍时,您可能需要加载Book parent的Author对象