hibernate的加载策略

hibernate是通过管理对象来操作数据的。这里对象值得是持久性对象。
对象的三种状态:

临时状态

持久状态

游离状态

在这里插入图片描述

这三种状态的对象是可以相互转换的,通过编码时只关注持久化对象。也就是get/save/update方法所操作后的对象。

一级缓存
作用:提高CPU的运行效率

一级缓存越大,CPU的运行效率越高,但受到CPU内部结构的限制,一级缓存的容量都很小。

hibernate中的一级缓存就是session级别的缓存。

public class StudentTest {
public static void main(String[] args) {
Session session = SessionFactoryUtils.getSession();
Transaction transaction = session.beginTransaction();
Student stu = session.get(Student.class, 3);
stu.setSname(“zs”);
transaction.commit();
session.close();
}
}
1、用户访问数据并拿到数据,将值形成快照保存在session中,并通过反射机制将值存放到实体类中
2、当封装好的持久性对象值发生改变时,会和快照进行对比,并修改

扩展:快照也就是一个数据的副本。快照的作用主要是能够进行在线数据备份与恢复

加载策略
两种方式:

立即加载
延迟加载(懒加载)

1、 立即加载–get加载数据
使用get获取数据,会立即查找(缓存—数据库)
2、 延迟加载懒加载 lazy—load,不会立即查找,当需要的时候才会查找
容易造成:LazyInitialaztionException异常:因为session被关闭。
3、 Load支持延迟加载,get不支持延迟加载。如果没有设置延迟加载,那么load也会立即加载对象。

延迟加载会报错

could not initialize proxy [com.zking.one.entity.User#12] - no Session 意思是不能初始化代理对象

proxy 代理

hibernate3以上所有的关系查询都是使用懒加载的策略

什么是懒加载呢?

  • 在调用session回话的数据库操作时,不会直接生成SQL语句去操作数据库,
  • 而是先创建一个代理对象,将oid(object id)标识代理对象放到session中保存,
  • 当具体要用到持久性对象时,才会去操作数据库。

并发控制
当很多人试图同时修改数据库中的数据时,必须有这样一种控制,使一个人的操作不对他人的操作产生负面影响,这就是并发控制。

说的更简单点就是,2个或者多个用户(实际用户,服务,多线程)同时编辑相同数据时,及其在连接或者断开情况下可能发生的情况。

并发控制的目的是保证一个用户的工作不会对另一个用户的工作产生不合理的影响。

并发控制理论根据控制方法分为乐观控制和悲观控制

乐观并发控制(Optimistic Concurrency)

在乐观并发控制中,用户读取数据时不锁定数据。当一个用户更新数据时,系统将进行检查,查看该用户读取数据后其他用户是否又更改了该数据。如果其他用户更新了数据,将产生一个错误。一般情况下,收到错误信息的用户将回滚事务并重新开始。这种方法之所以称为乐观并发控制,是由于它主要在以下环境中使用:数据争用不大且偶尔回滚事务的成本低于读取数据时锁定数据的成本。

悲观并发控制(Pessimistic Concurrency)

一个锁定系统,可以阻止用户以影响其他用户的方式修改数据。如果用户执行的操作导致应用了某个锁,只有这个锁的所有者释放该锁,其他用户才能执行与该锁冲突的操作。这种方法之所以称为悲观并发控制,是因为它主要用于数据争用激烈的环境中,以及发生并发冲突时用锁保护数据的成本低于回滚事务的成本的环境中。

简单的理解通常通过“独占锁”的方法。获取锁来阻塞对于别的进程正在使用的数据的访问。换句话说,读者和写者之间是会互相阻塞的 ,这可能导致数据同步冲突。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值