刚刚开始的时候觉得这个快照区很难理解,在网上看了很多博客之后,开始明白了。我是结合 ADO.NET 理解的,在ADO.NET 中有一个类,

叫 SqlCommandBuilder,在我看来,他就是 ADO.NET 中和 Hibernate 快照区对应的东西,这个 SqlCommandBuilder 可以构建 SQL 语句,并且当调用Update 方法之后,可以将数据库中的信息更新(包括更新和删除),其中还必不可少的一个枚举类,就是行状态位 RowState类,我将这个行状态位和Hibernate 的对比(对比缓存区和快照区)当成对应。只不过,当刷新缓存区时,Hibernate 它做了一个比对缓存区和快照区的内容(如果发现不同,就更新快照区,并存储一条 updata 的 SQL 语句,如果执行的不是刷新操作,而是提交事务操作,那么不仅会存储这个updata语句,还会发送到数据库执行这个updata 的 SQL),而 ADO.NET 没有进行比对,而是进行了记录(即改变了该行的 RowStae 值),最后 SqlCommandBuilder 根据这个状态位和主键,更新到数据库,其实,在某种角度下,比对也是一种做记录(和修改行状态位类似),直到提交事务,就更新到数据库。

加上一句,快照我理解为数据库的快照(最初是数据库某些行的的快照,然后一顿操作,这时就不再是数据库的快照了,但提交事务后,又成了数据库的一部分行的快照了。)

关于SqlCommandBuilder可以看这篇博客【SQLCommandBuilder类

还有这个类【RowSate类

也许我讲的不够明白,但是目前的理解就是这样。

Hibernate 中一级缓存和快照区的理解的更多相关文章

  1. Hibernate的一级缓存:快照区

    参考来源:http://blog.sina.com.cn/s/blog_981ee5d80102w85f.html

  2. JavaWeb_(Hibernate框架)Hibernate中一级缓存

    Hibernate中一级缓存 Hibernate 中的缓存分为一级缓存和二级缓存,这两个级别的缓存都位于持久化层,并且存储的都是数据库数据的备份.其中一级缓存是 Hibernate 的内置缓存,在前面 ...

  3. Hibernate中一级缓存和二级缓存

    缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能.缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事 ...

  4. day35-hibernate映射 05-Hibernate的一级缓存:快照区

    SessionImpl里面有很多的Java集合,很多java集合才构成了一级缓存.一级缓存里面有一个非常特殊的区域叫做快照区.SessionImpl实现了Session接口,有很多Java集合(包括M ...

  5. Hibernate中一级缓存和二级缓存使用详解

    一.一级缓存二级缓存的概念解释 (1)一级缓存就是Session级别的缓存,一个Session做了一个查询操作,它会把这个操作的结果放在一级缓存中,如果短时间内这个 session(一定要同一个ses ...

  6. Hibernate中一级缓存概念以及flush与clear的区别

    Hibernate采用缓存机制提高数据查询效率.缓存分为一级缓存和二级缓存,一级缓存在Session中存在,二级缓存需要手动配置. 在一级缓存中,如果数据保存到数据库中后,而session又没有关闭的 ...

  7. hibernate一级缓存和快照

    摘自网络: Hibernate中的一级缓存的底层是以Map形式存在的,key是主键,value是对象,所以它的泛型为Map<Serializable,Object>,key的泛型为串行化是 ...

  8. Hibernate的一级缓存

    Hibernate的一级缓存 什么是缓存:缓存将数据库/硬盘上文件中数据,放入到缓存中(就是内存中一块空间).当再次使用的使用,可以直接从内存中获取 缓存的好处:提升程序运行的效率.缓存技术是Hibe ...

  9. (转)Hibernate的一级缓存

    http://blog.csdn.net/yerenyuan_pku/article/details/70148567 Hibernate的一级缓存 Hibernate的一级缓存就是指Session缓 ...

随机推荐

  1. 20155217 实验四 Android程序设计

    20155217 实验四 Android程序设计 任务一: 完成Hello World, 要求修改res目录中的内容,Hello World后要显示自己的学号. R.java文件是定义该项目所有资源的 ...

  2. 1018: [SHOI2008]堵塞的交通traffic

    1018: [SHOI2008]堵塞的交通traffic 链接 分析: 用线段树维护区间的四个端点的联通情况,然后查询的时候,把所有覆盖到的区间合并起来即可. 六种情况左上到右上(左边到右边的情况)… ...

  3. ELKStack入门篇(一)之ELK部署和使用

    一.ELKStack简介 1.ELK介绍 中文指南:https://www.gitbook.com/book/chenryn/elk-stack-guide-cn/details ELK Stack包 ...

  4. DSP28335做FFT傅里叶变换

    1. 看了一下例程,居然没有FFT的例程,难道这个DSP28335不能做FFT吗?对了C2000系列是有C2000 ware这个库的.方便很多,不过目前不确定在C5000上运行的FFT能直接迁移到DS ...

  5. manjaro i3下 dmenu terminal 和 terminal_hold 打开方式记录

    分别用type为terminal 和 terminal_hold 打开eclipse 用terminal_hold打开,终端和界面分左右显示 用terminal打开,终端和界面分上下显示 除了排列方式 ...

  6. Java Basic&Security Tools

    JDK Tools and Utilities Basic Tools These tools are the foundation of the JDK. They are the tools yo ...

  7. Harbor配置https,并安装内容信任插件(notary)

    1.配置https https://github.com/goharbor/harbor/blob/master/docs/configure_https.md 2.harbor安装notary插件 ...

  8. 数据库mysql的常规操作

    1. 什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的建立在计算机存储设备上的仓库. 简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进 ...

  9. asp之GetArray提取链接地址,以$Array$分隔的代码

    '================================================== '函数名:GetArray '作 用:提取链接地址,以$Array$分隔 '参 数:ConStr ...

  10. 禁用 Python GC,Instagram 性能提升10%

    通过关闭 Python 垃圾收集(GC)机制,该机制通过收集和释放未使用的数据来回收内存,Instagram 的运行效率提高了 10 %.是的,你没听错!通过禁用 GC,我们可以减少内存占用并提高 C ...