hibernate加载策略

本文详细解析了Hibernate中对象的三种状态:临时、持久和游离状态,并阐述了一级缓存的工作原理及快照机制。同时,对比了立即加载与延迟加载策略的区别,深入探讨了代理对象的概念及其在LazyInitializationException中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 对象的三种状态(hibernate管理的对象)
    1.1 临时状态
    1.2 持久状态
    1.3 游离状态
    图解:
    在这里插入图片描述
//状态之间的转换
      //持久状态
	  User user = session.get(User.class, 1);
	  session.close();
	  session = sessionFactory.openSession();
	  //游离状态
	  user.setReal_name("净化");
	  session.update(user);
	  //持久状态
	  user.setReal_name("净化");
	  session.delete(user);
	  //临时状态
	  user.setReal_name("净化");
	  session.save(user);
	  //持久状态
	  user.setReal_name("净化");

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

  1. 一级缓存、快照(orm特性)
    u = {1 ww 20 2018-5-3 abcd} --> u = {1 qq 17 null xyz}

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

一级缓存:又被称为session级别的缓存,当session.get执行的时候
将查询出来的对象形成快照保存到内存中

session.update(user)
就是将user实例对象与jvm中的快照进行对比,当不一致的时候,会自动更新数据库

  1. 加载策略
    3.1 立即加载
    get方法

     采用的是立即加载,执行到这方法的时候就会立即发送SQL语句去查询。
    
     查询后返回的是真实对象,对象的本身。
    
     查询一个找不到的对象,返回是null。
    

3.2 延迟加载
load方法

    采用的是延迟加载(lazy懒加载),执行到这方法的时候,不会发送SQL语句,当真正使用这个对象才会发送SQL语句,即提交事务。
    
    查询后返回的是代理对象。利用的是javassist技术产生的代理。
    查询一个找不到的对象,返回ObjectNotFoundException。

  代理对象
    存单
    LazyInitializationException
	
	单例模式
		饱汉模式
		饿汉模式/懒汉模式
  1. 并发控制
    version

    update t_student set sname=‘zs1’, version=version+1
    where sid = 8 and version=0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值