hibernate中加载策略+批加载+懒加载异常【原创】

栏目: Hibernate · 发布时间: 7年前

内容简介:加载策略为了提高hibernate的效率,hibernate提供了两种加载策略来提高效率及时加载: lazy:false  不管该对象是否使用都立刻加载

加载策略

为了提高hibernate的效率,hibernate提供了两种加载策略来提高效率

及时加载: lazy:false  不管该对象是否使用都立刻加载

延时加载:lazy:true只有该对象使用才加载

注意:只有Session对象的load方法才可以设置加载策略 ,get方法永远都是及时加载

加载策略又分

类级别加载策略:判断是否加载类对象,不判断是否加载也该类关联的对象或集合。

关联级别加载策略:在加载对象的时候,判断是否加载该类关联的对象或集合。

一对多的关联级别加载策略

true:只有使用到该对象关联的集合或对象时才加载

false:在加载该对象时立刻加载关联的集合或对象

extra:只有使用到该对象关联的集合或对象时才加载,如果只是调用集合的size属性只是发送count(*)

多对一:

false:在加载对象的时候,立刻加载关联集合或对象

proxy:在加载对象的时候,看一的方的类加载级别,false立刻加载,true懒加载

</div>
<div><hibernate-mapping package="b_lazy.one2many"></div>
<div>     <!--类级别加载策略  --></div>
<div>     <class name="User" table="t_user" lazy=false></div>
<div>          <id name="id" column="id"></div>
<div>              <generator class="native"></generator></div>
<div>          </id></div>
<div>          <property name="name" column="name"></property></div>
<div>          <property name="password" column="password" ></property></div>
<div>   <!--关联级别加载策略  --></div>
<div>          <set name="addresss" lazy= flase ></div>
<div>              <key column="user_id"></key></div>
<div>              <one-to-many class="Address" /></div>
<div>          </set></div>
<div>     </class></div>
<div></hibernate-mapping></div>
<div> 

批查询

当用户关联地址,当我们获取到所有的用户的集合时候,遍历地址,懒加载情况下会获取一次加载一次,我们可以设置批查询来让他一次多加载几个

批量查询使用in语句减少查询订单语句个数。

默认:select * from t_address where address.user.id = ?

批量:select * from t_address where address.user.id in (?,?,?,?)

<set batch-size=”5″> 5表示括号中?代表加载个数。

</div>
<div>
<div><set name="addresss" cascade="all"  batch-size="4"></div>
<div>              <key column="user_id"></key></div>
<div>              <one-to-many class="Address" /></div>
<div> </set></div>
<div>

懒加载异常

出现原因:在获取到懒加载的数据时没有使用,而对象解除session管理的情况下(关闭session或者clear,

evict等方法)再次使用对象

因为在数据是懒加载时,只有使用到该数据才会被加载

注意:关联级别懒加载异常容易被忽视

关联级别懒加载true

</div>
<div>public void test1() throws Exception {</div>
<div>          Session session=HibernateUtil.getSession();</div>
<div>          session.beginTransaction();</div>
<div></div>
<div>          User u=(User) session.get(User.class,1);//因为是关联级别懒加载为true,此时并不加载关联的集合或对象</div>
<div></div>
<div>          session.clear();//清空session,此时对象不被session管理</div>
<div>          System.out.println(u.getAddress());//报错!</div>
<div></div>
<div>          session.beginTransaction().commit();</div>
<div>          session.close();</div>
<div>     }</div>
<div>

转载时请注明出处及相应链接,本文永久地址:https://blog.yayuanzi.com/24293.html

hibernate中加载策略+批加载+懒加载异常【原创】

hibernate中加载策略+批加载+懒加载异常【原创】 微信打赏

hibernate中加载策略+批加载+懒加载异常【原创】 支付宝打赏

感谢您对作者Alex的打赏,我们会更加努力!    如果您想成为作者,请点我


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

人工智能+:AI与IA如何重塑未来

人工智能+:AI与IA如何重塑未来

[美]韩德尔·琼斯(Handel Jones) [中]张臣雄 / 机械工业出版社 / 2018-10 / 55.00

当深度学习模型引发了全世界对人工智能的再次关注时,人工智能迎来第三次高速增长,人工智能(AI)、增强现实(AR)和虚拟现实(VR)正把人类带向新的“智能增强时代”(IA),我们将在不知不觉中接纳机器智能。 针对人类社会长期存在的众多复杂的动态的难题,人机融合智能将会提供全新的解决方案,谷歌、Facebook、微软、亚马逊、腾讯、阿里巴巴、百度等平台巨头纷纷斥千亿巨资布局人工智能的尖端技术;智......一起来看看 《人工智能+:AI与IA如何重塑未来》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

随机密码生成器
随机密码生成器

多种字符组合密码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试