码迷,mamicode.com
首页 > Web开发 > 详细

关于hibernate的延迟加载问题

时间:2015-07-31 18:47:46      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

为什么需要延迟加载?

因为会提高效率嘛,存在即合理,哈哈.一般设置延迟加载就是在对象关系映射上(在多的一方).如下图:

技术分享

一个用户有多个消费纪录。

设置成lazy后,查询数据的时候只会取出消费记录(多的一方),不会查询用户(这不就提高效率了吗,也就是关联数据不会查询数据库),但是另一个问题又来了,我要查询数据库的时候把关联的数据查询出来怎么办?如下图:

技术分享

需要查询的时候将关联的数据再查询一次.

百度上是这么写的:

如果是EAGER,那么表示取出这条数据时,它关联的数据也同时取出放入内存中.(一次都查询出来所有数据)

如果是LAZY,那么取出这条数据时,它关联的数据并不取出来,在同一个session中,什么时候要用,就什么时候取(再次访问数据库)。

科普一下:

1、FetchType.LAZY:懒加载,加载一个实体时,定义懒加载的属性不会马上从数据库中加载。

2、FetchType.EAGER:急加载,加载一个实体时,定义急加载的属性会立即从数据库中加载。

3、比方User类有两个属性,name跟address,就像百度知道,登录后用户名是需要显示出来的,此属性用到的几率极大,要马上到数据库查,用急加载;而用户地址大多数情况下不需要显示出来,只有在查看用户资料是才需要显示,需要用了才查数据库,用懒加载就好了。所以,并不是一登录就把用户的所有资料都加载到对象中,于是有了这两种加载模式。
总结:有关系对象映射的时候,需要设置延迟加载(多的一方).可以提高效率.

关于hibernate的延迟加载问题

标签:

原文地址:http://my.oschina.net/Tsher2015/blog/486242

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!