lazy = false,eager和immediate fetching之间的区别是什么?

时间:2011-11-10 17:07:58

标签: java hibernate

我是Hibernate对象持久性的新手。我正在读一本书,试图了解懒惰设置与错误,急切和即时提取之间的区别,但我没有看到任何区别。任何帮助?

提前致谢!

2 个答案:

答案 0 :(得分:1)

我相信“立即”是“渴望”的同义词(渴望成为JPA,Hibernate实现,定义)

懒惰就像听起来一样。在必要之前不要做任何事情。急切意味着......听起来如此。

如果Foo有一个Collection,并且你将它设置为lazy,那么只有当你需要该集合的内容时才会选择,加载等等。而如果它很渴望,它会在加载时加载Bars富。如果您急切地加载急切加载实体集合的实体集合,这可能会有问题,等等。

但是,如果你把一切都变得懒惰,那么你可能会遇到过多的查询和往返。您必须选择适合您使用实体的方式。

如果您想要一条经验法则,请从懒惰开始。

答案 1 :(得分:1)

立即和急切提取之间的主要区别在于立即提取,有两个单独的查询为拥有对象触发一个,为关联对象触发另一个。但是对于急切的提取,只会触发一个查询,包括内连接/外连接,以获取与实体关联的对象。