首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >什么是Hibernate中的延迟加载?

什么是Hibernate中的延迟加载?
EN

Stack Overflow用户
提问于 2010-02-03 21:41:22
回答 10查看 274.6K关注 0票数 190

Java中的延迟加载是什么?我不明白这个过程。有人能帮助我理解延迟加载的过程吗?

EN

回答 10

Stack Overflow用户

发布于 2010-02-03 21:42:48

假设您有一个父级,并且该父级有一个子级集合。Hibernate现在可以“惰性加载”子代,这意味着它在加载父代时实际上并不会加载所有的子代。相反,它会在请求时加载它们。你可以显式地请求,或者,当你试图访问一个孩子时,hibernate会自动加载它们,这是非常常见的。

延迟加载可以帮助显着提高性能,因为您通常不需要孩子,因此不会加载它们。

还要注意n+1-问题。当您访问集合时,Hibernate不会实际加载所有子级。相反,它将单独加载每个子级。当迭代集合时,这会导致对每个子级进行查询。为了避免这种情况,您可以诱使hibernate同时加载所有的子对象,例如通过调用parent.getChildren().size()。

票数 276
EN

Stack Overflow用户

发布于 2013-01-31 14:16:45

默认的延迟加载是true.Lazy加载,这意味着当执行select查询时,它不会命中数据库。它将等待getter函数,即当我们需要时,它将从数据库中获取。例如:你是一位父母,他的孩子有很多玩具。但目前的问题是,每当你打电话给他(我们假设你有一个男孩)时,他也会带着他所有的玩具来找你。现在这是一个问题,因为你不想让他一直带着他的玩具。因此,作为基本的家长,您可以直接将孩子的玩具定义为懒惰。现在无论你什么时候打电话给他,他都不带玩具来找你。

票数 18
EN

Stack Overflow用户

发布于 2014-01-09 13:11:23

用外行的话来说,就像你在做蛋糕,你需要从冰箱里拿出5-10种配料。你有两个选择,从冰箱里拿出所有的食材放在你的厨房平台上,或者在需要的时候带上你想要的东西。

类似地,在急切加载中,您获取关于bean及其相关类的所有信息(不是子类或is-a关系,而是具有关系,即蛋糕有面粉、有牛奶、有奶油等),在延迟加载的情况下,首先只带来来自同一个表的标识符和值(在蛋糕的情况下,您首先需要在您的碗中使用必要的配料)。所有来自其他表的信息都将在需要/使用时获取。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2192242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档