Hibernate 加载策略

1. 对象的三种状态(hibernate管理的对象)

1.1 临时状态
1.2 持久状态
1.3 游离状态
在这里插入图片描述

1、hibernate是通过管理对象来操作数据,这里对象指的是持久化对象。
2、hibernate中的三种状态的对象是可以相互转换的,通常编码时只关注持久
化对象。关注get、save、update方法所操作后的对象

2. 一级缓存、快照(orm特性)

在Session中定义了一系列的集合来存储数据,它们构成了Session的缓存。只要Session没有关闭,它就会一直存在。当我们通过Hibernate中的Session提供的一些API例如save()、get()、update()等进行操作时,就会将持久化对象保存到Session中,当下一次再去查询缓存中具有的对象(通过OID值来判断),就不会去从数据库中查询了,而是直接从缓存中获取。Hibernate的一级缓存存在的目的就是为了减少对数据库的访问。
当然了,在Hibernate中还有一个二级缓存,它是SessionFactory级别缓存

3. 加载策略

3.1 立即加载
3.2 延迟加载
  • 01.类级别的查询策略
    • 02.一对多和多对多关联的查询策略
      • 03.多对一关联的查询策略

什么时候使用延迟加载

如果程序加载一个对象的目的是为了访问它的属性,可以采用立即加载。如果程序加载一个持久化对象的目的是仅仅为了获得它的引用,可以采用延迟加载。

什么是懒加载

1,hibernate3以上,所有的关系查询都是使用懒加载的策略
* 什么时懒加载的策略?
* 在调用sesseion会话的数据库操作的方法时,并不会之间生成sql语句去操作数据库,而是先
* 创建一个代理对象,将oid(object id) 存放到session的代理对象中,当具体的要用到持久化对象
* 的时候,才会生成sql语句进行查询。

4. 并发控制

如果两个人一起操作一条数据,那么会出现有一个人已经修改成功了,另外一个的数据没有发生改变,但他们的结果全部已经改变了,就出现了一个延时的Bug。我们可以在数据库里面加一列,integer类型来控制数据的改变。

总结

Hibernae 的延迟加载是一个非常常用的技术,实体的集合属性默认会被延迟加载,实体所关联的实体默认也会被延迟加载。hibernate通过这种延迟加载来降低系统的内存开销,从而保证 Hibernate 的运行性能。Hibernate 的延迟加载(lazy load)本质上就是代理模式的应用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值