脏检查和快照的故事



什么是脏检查?

  解析:当事务提交时,Hiberante会对Session中持久状态的对象进行检测,判断对象的数据是否发生了改变。

如何进行脏检查?

  解析:当一个Dept对象被加入到Session缓存(有人又称为 一级缓存  后者是内部缓存)中时,Session会为Dept对象的值类型的属性复制一份快照。当Session刷新缓存时,会先进行脏检查,即比较Dept对象的当前属性与它的快照,来判断Dept对象的属性是否发生了变化。如果发生了变化,Session会根据脏对象的最新属性值来执行相关的SQL语句,将变化更新到数据库中

Session具有一个缓存,可以管理和跟踪所有持久化对象,对象和数据库中的相关记录对应。

脏检查和快照的图解过程:

  



缓存清理机制:

1.当应用程序调用org.hibernate.Transaction的commit()方法的时候.commit方法先清理缓存,然后再向数据库提交事务。Hibernate之所以把清理缓存的时间点安排在事务快结束时,一方面是因为可以减少访问数据库的频率,还有一方面是因为可以尽可能缩短当前事务对数据库中相关资源的锁定时间。

2.当应用程序执行一些查询操作时,如果缓存中持久化对象的属性已经发生了变化,就会清理缓存,使得Session缓存与数据库已经进行了同步,从而保证查询结果返回的是正确的数据。

3.当应用程序显示调用Session的flush()方法的时候。



脏检查和快照的故事

时间: 2024-08-02 19:01:31

脏检查和快照的故事的相关文章

Hibernate中的脏检查和缓存清理机制

脏检查 Session到底是如何进行脏检查的呢?当一个Customer对象被加入到Session缓存中时,Session会为Customer对象的值类型的属性复制一份快照.当Session清理缓存时,会先进行脏检查,即比较Customer对象的当前属性与它的快照,来判断Customer对象的属性是否发生了变化,如果发生了变化,就称这个对象是“脏对象”,Session会根据脏对象的最新属性来执行相关的SQL语句,从而同步更新数据库. 脏数据检查: 什么是脏数据?脏数据并不是废弃和无用的数据,而是状

Hibernate 脏检查和刷新缓存机制

刷新缓存: Session是Hibernate向应用程序提供的操作数据库的主要接口,它提供了基本的保存,更新,删除和加载java对象的方法,Session具有一个缓存,可以管理和追踪所有持久化对象,对象和数据库中的相关记录对应,在某些时间点,Session会根据缓存中对象的变化来执行相关SQL语句,将对象包含的变化数据更新到数据库中,这一过程成为刷新缓存. 脏检查: 当刷新缓存时,Hibernate会对Session中的持久状态的对象进行检测,判断对象的数据是否发生了改变,这种判断成为脏检查,

脏检查和刷新缓存机制

脏检查 脏检查是在提交事务的时候会进行脏检查,脏检查会对比快照和原始数据,如果发现数据不匹配就会将session中的数据清理 (在这里补充一下快照和原始数据,快照和原始数据是匹配的数据,在set数据时,会保存两份数据,一份是快照,一份是原始数据) 清理缓存是将session当中不同步的快照数据把他更改的信息更新到数据库,而session中的数据依然存在 清空缓存是将缓存中的数据和数据库的数据同步,缓存中依然存在数据,用session.close()清空数据,那么在session中的Map集合就会

Hibernate——脏检查和缓存清理机制

脏检查 Session到底是如何进行脏检查的呢?当一个Customer对象被加入到Session缓存中时,Session会为Customer对象的值类型的属性复制一份快照.当Session清理缓存时,会先进行脏检查,即比较Customer对象的当前属性与它的快照,来判断Customer对象的属性是否发生了变化,如果发生了变化,就称这个对象是“脏对象”,Session会根据脏对象的最新属性来执行相关的SQL语句,从而同步更新数据库. 缓存清理机制 当Session缓存中对象的属性每次发生了变化,S

hibernate面试点

1.谈谈你对hibernate的认识和理解 01.全自动的ORM框架 02.子项目 03.面向对象的思想来解决操作数据库 01.hibernate是一个开放源代码的对象关系映射(ORM)框架,它对JDBC进行了非常轻量级的对象封装,使得程序员可以按照面向对象的思想来操控数据库中的数据 02.hibernate的核心接口有Configuration.SessionFactory.Session.Transaction.Query.首先由Configuration获取配置信息并做一切初始化的工作,接

初学Hibernate

Hibernate的核心组件在基于MVC设计模式的JAVA WEB应用中,Hibernate可以作为模型层/数据访问层.它通过配置文件(hibernate.properties或hibernate.cfg.xml)和映射文件(***.hbm.xml)把JAVA对象或PO(Persistent Object,持久化对象)映射到数据库中的数据库,然后通过操作PO,对数据表中的数据进行增,删,改,查等操作.除配置文件,映射文件和持久化类外,Hibernate的核心组件包括以下几部分:a)Configu

hibernate session缓存和java对象生命周期

一.java对象生命周期 1.在java中,使用new关键字,创建一个java对象,jvm就为这个对象分配一块内存空间.只要这个变量被引用,他就一直存在于内存中.如果没有被任何变量引用(包括间接引用),那么这个对象就会被垃圾回收器回收.下面用一段代码来解释: Customer c=new Customer(); Order o1=new Order(); Order 02=new Order(); o1.setCustomer(c); c.getOrders().add(o1); o1=null

06Hibernate实体类生命周期

前言:Session接口是Hibernate向应用程序提供的操作数据库的主要接口,它提供了基本的增删查改方法,而且Session具有一个缓存它是Hibernate的一级缓存.站在持久化层的角度,Hibernate把实体类分为4种状态:持久化状态.临时状态.游离状态和删除状态.本文将会介绍Hibernate这些机制的细节以及使用方法. 1.Hibernate的Session缓存 (1)Session缓存的作用 使用Session的缓存有三大作用: 减少访问数据库的频率,当Session的get()

Hibernate试题解析

1.在Hibernate中,以下关于主键生成器说法错误的是(AC). A.increment可以用于类型为long.short或byte的主键(byte类型不可以) B.identity用于如SQL Server.DB2.MySQL等支持标识列的数据库 C.sequence用于如Oracle.SQL Server等支持序列的数据库 D.native由Hibernate根据底层数据库自行判断采用何种主键生成策略,是由使用的数据库生成主键的值 解析:A.都是变相的int 2.在Hibernate中,