hibernate中的延迟初始化
我正在尝试学习Hibernate,我通过了Hibernate惰性初始化。我有一些关于延迟初始化的澄清。hibernate中的延迟初始化,hibernate,lazy-initialization,Hibernate,Lazy Initialization,我正在尝试学习Hibernate,我通过了Hibernate惰性初始化。我有一些关于延迟初始化的澄清。 首先,什么是所谓的延迟初始化,它做什么?第二,我应该什么时候去?接下来,我在博客中发现,使用它可以提高性能,我只需要知道如何使用它。那么,使用它有什么缺点吗?有谁能帮我理解一下延迟初始化吗?延迟初始化意味着延迟加载 简而言之—— 当您第一次需要时初始化对象,它会为您提供高性能,因为不会加载不必要的对象。” e、 g.-假设您需要有一个包含多个表的连接的记录。如果您一次获取所有表,所需时间将比仅
首先,什么是所谓的延迟初始化,它做什么?第二,我应该什么时候去?接下来,我在博客中发现,使用它可以提高性能,我只需要知道如何使用它。那么,使用它有什么缺点吗?有谁能帮我理解一下延迟初始化吗?延迟初始化意味着延迟加载 简而言之—— 当您第一次需要时初始化对象,它会为您提供高性能,因为不会加载不必要的对象。” 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端)
- 如果还需要员工,则必须执行单独的查询
包含有趣的信息。惰性设置决定在加载父对象时是否加载子对象。您需要对父类的各个hibernate映射文件执行此设置。
Lazy=true
(表示不加载子对象)默认情况下,子对象的延迟加载为true。这确保不会加载子对象,除非通过调用父对象上的getChild()
方法在应用程序中显式调用它们。在这种情况下,hibernate在getChild()时发出一个新的数据库调用来加载子对象实际上对父对象调用了
。但在某些情况下,在加载父对象时确实需要加载子对象。只需将设置为lazy=false,hibernate将在从数据库加载父对象时加载子对象。示例lazy=true
(默认值)如果用户类的Address子对象不是经常需要的,则可以将其设置为lazy。lazy=false
,但是每当您处理在线书店的书籍时,您可能需要加载Book parent的Author对象