hibernate懒加载和急加载的区别

 我来答
百度网友5e15b90
2017-10-16 · TA获得超过1031个赞
知道小有建树答主
回答量:806
采纳率:91%
帮助的人:828万
展开全部
懒加载: FatchType.LAZY :在加载一个实体的时候,不会马上从数据库中加载,即从数据库中加载到内存。
急加载:FatceType.EAGER :在加载一个实体时,会立即从数据库中查询,与其关联的类也会被同时查询。
在我们使用@ManyToOne等时,都会被默认为急加载。
在hibernate中,我们无论是使用懒加载还是急加载,get方法都会一次加载所有基本数据类型属性的值,而load则不同。
在我们开启了懒加载之后,load方法只会加载id属性,所有的非id属性的访问操作都不会执行。只有id属性中有实际值(其实就是你调用load方法时传的那个),
在session没有关闭的之前,如果访问除id外的其他属性才会发sql语句去查询,我们经常犯的一个错误就是在当前session关闭以后访问由load()加载的对象的非id属性,
此时Hibernate尝试通过当前session发sql查询,但发现session已经关闭,这样就会发出no session的异常 。
一般我们将将FetchType.lazy 改成 EAGER ,就可以避免这个错误。
但是在我们需要查询一个表时,如果这个表有很多与其关联的表,如果使用急加载的话,在第一次加载就会很慢,如果是懒加载相对则会快一些。但是在我们又需要查询与此表相关的数据的时候
急加载就会很快,因为在第一次加载的时候,已经帮我们全部加载好了。而懒加载则会相对慢一些,因为在我门需要查询的时候,它才会帮我们去查。
所以让他们算是各有优缺点。
而我们用哪一种方法更好,则需要根据我们的具体情况去使用了
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式