hibernate 三种状态、一级缓存、快照、加载策略、并发控制

  1. 对象的三种状态(hibernate管理的对象)
    1.1 临时状态
    1.2 持久状态
    1.3 游离状态
    在这里插入图片描述

  2. 一级缓存、快照
    通过调用hibernatesession接口的get方法后,user对象被加载为持久化对象
    同时加入到hibernate的session一级缓存中,并留下一个快照

    u = {1 ww 20 2018-5-3 abcd} --> u = {1 qq 17 null xyz}

    u’ = {1 ww 20 2018-5-3 abcd}

  3. 加载策略
    3.1 立即加载
    get方法(立即加载)
    两种情况:
    1.当前user对象属性未修改,则不执行update
    2.当前user对象属性已修改,与存入hibernate一级缓存中的快照对象进行对比
    修改前属性:user=[id=4,username=admin,password=1233]
    修改后属性:user=[id=4,username=root,password=0000]
    当执行commit()时,Hibernate同时会清理session的一级 缓存(flush),也就是将
    堆内存中的数据与快照中的数据进行对比,如果不一致,则会执行更新(update)
    操作 ,若相同,则不执行update。

4、一个方法内先后执行两个事务,此时用的是一个session,会利用hibernate的一级缓存机制。

3.2 延迟加载(懒加载)
代理对象
存单
LazyInitializationException

	使用load方法表示延迟加载
	注意:oid(对象标识符)
	1,通过调用hibernate的session接口的load方法后返回一个代理对象
	2.代理对象中的只有oid属性有值
	3,在访问对象的非oid属性:代理对象将会执行初始化操作

	执行代理对象初始化操作,因为调用了user对象的tostring方法,即访问了非oid属性
	两种情况:
	1.关闭session访问代理对象的非oid属性报错,延迟加载异常LazyInitializationException
	2.不关闭session,访问代理对象的非oid属性,执行代理对象的初始化操作
  1. 并发控制
    version=2 2
    A:
    update t_student set sname=‘zs’, version=version+1
    where sid = 8 and version=1

B:
update t_student set sname=‘ls’, version=version+1
where sid = 8 and version=2

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值