`

java - hibernate - 脏检查,缓存清理

阅读更多

脏检查

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

 

缓存清理机制

当Session缓存中对象的属性每次发生了变化,Session并不会立即 清理缓存和执行相关的SQL update语句,而是在特定的时间点才清理缓存,这使得Session能够把几条相关的SQL语句合并为一条SQL语句,一遍减少访问数据库的次数,从 而提高应用程序的数据访问性能。

在默认情况下,Session会在以下时间点清理缓存。

  1. 当应用程序 调用org.hibernate.Transaction的commit()方法的时候.commit方法先清理缓存,然后再向数据库提交事务。 Hibernate之所以把清理缓存的时间点安排在事务快结束时,一方面是因为可以减少访问数据库的频率,还有一方面是因为可以尽可能缩短当前事务对数据 库中相关资源的锁定时间。
  2. 当应用程序执行一些查询操作时,如果缓存中持久化对象的属性已经发生了变化,就会清理缓存,使得Session缓存与数据库已经进行了同步,从而保证查询结果返回的是正确的数据。
  3. 当应用程序显示调用Session的flush()方法的时候。

Session进行清理缓存的例外情况是,如果对象使用native生成器来生成OID,那么当调用Session的save()方法保存该对象时,会立即执行向数据库插入该实体的insert语句。

 

 

session - commit,flush

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    day37 05-HIbernate二级缓存:一级缓存更新同步到二级缓存及二级缓存配置文件

    Hibernate作为Java领域中广泛使用的对象关系映射(ORM)框架,极大地简化了数据操作。本篇文章将深入探讨Hibernate的二级缓存机制,以及如何进行一级缓存与二级缓存的同步,同时还会介绍二级缓存的配置文件设置。 ...

    day37 07-Hibernate二级缓存:查询缓存

    如果同样的查询再次执行,Hibernate会先检查查询缓存,如果命中,则直接返回结果,避免了再次执行昂贵的数据库查询。 然而,使用查询缓存需要注意几个关键点: - **更新一致性**:由于二级缓存可能包含旧数据,...

    hibernate--4.使用hibernate的缓存-1

    在IT行业中,Hibernate是一个非常重要的Java持久化框架,它简化了数据库操作,使得开发者可以更加专注于业务逻辑而不是底层数据访问。本节我们将深入探讨“Hibernate的缓存”这一主题,这是提高应用程序性能的关键...

    hibernate二级缓存java包下载

    Hibernate 是一个非常流行的开源对象关系映射(ORM)框架,它允许 Java 开发人员将数据库操作转换为面向对象的方式,从而简化了数据访问。在 Hibernate 中,缓存机制是提高性能的重要工具,尤其是在处理大量数据时。...

    hibernate一级缓存、二级缓存和查询缓存

    在Java的持久化框架Hibernate中,缓存机制是提高应用程序性能的关键要素。缓存能够减少数据库的访问次数,提高数据读取速度,并且在一定程度上降低了系统的负载。本文将详细讲解Hibernate中的三级缓存:一级缓存、二...

    hibernate开启二级缓存和查询缓存

    Hibernate 是一个流行的对象关系映射(ORM)框架,它允许开发者使用 Java 对象来操作数据库。在 Hibernate 中,二级缓存和查询缓存是提高应用性能的重要机制。下面将详细介绍如何开启并理解这两个缓存机制。 ### 1....

    hibernate缓存机制

    Hibernate缓存机制是提高应用程序性能的关键技术之一,它通过存储数据副本减少对物理数据库的访问。缓存可以分为两层:第一级缓存和第二级缓存。 **第一级缓存**是内置在Session中的,它是不可卸载的,也称为...

    Hibernate缓存技术研究

    ### Hibernate缓存技术研究 #### 一、引言 Hibernate是一种强大的对象-关系映射(Object-Relational Mapping,简称ORM)工具,主要用于Java环境下的应用程序。它能够将应用程序中的对象模型映射到关系型数据库的表...

    Hibernate + EhCache 实现数据缓存的处理

    2. 使用`session.evict()`或`session.clear()`方法清除缓存。 3. 再次加载同一个实体对象,如果缓存有效,这次应该不会执行数据库查询,而是直接从缓存中获取数据。 通过上述配置和编程方式,Hibernate和EhCache...

    hibernate一级和二级缓存配置与详解

    在Java持久化框架Hibernate中,缓存机制是一个重要的性能优化手段,它能够显著减少数据库的访问次数,提高应用程序的运行效率。本篇将深入探讨Hibernate的一级缓存和二级缓存,以及查询缓存的配置和使用。 ### 一级...

    Hibernate4二级缓存实例(源码)

    Hibernate是一个流行的Java对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库。而二级缓存则是Hibernate为了提高数据访问性能提供的一个重要特性。 **描述解析:**“用memcached实现 Hibernate...

    hibernate一级缓存

    在Java的持久化框架Hibernate中,一级缓存是其核心特性之一,它为提高数据库操作效率、减少对数据库的访问提供了重要支持。一级缓存,也称为session缓存,是每个Hibernate Session内部管理的一个内存结构。在本篇...

    hibernate二级缓存示例源码

    - 更新操作可能导致缓存中的数据过期,需要正确处理缓存同步,例如使用`@CacheEvict`注解进行缓存清理。 - 对于大对象或频繁更新的对象,二级缓存可能不是最佳选择,因为它们会占用大量内存并增加缓存管理的复杂性。...

    Hibernat一级缓存(源码)

    2. 如果后续对同一实体进行查询,Hibernate 会首先检查一级缓存,如果找到则直接返回,避免了对数据库的重复查询。 3. 当 Session 提交事务(commit)时,一级缓存中的所有变更会被同步到数据库中。如果在事务过程中...

    Hibernate缓存,性能优化

    本文将深入探讨Hibernate缓存的原理、类型及其对性能优化的影响。 ### Hibernate缓存原理 Hibernate缓存主要分为一级缓存和二级缓存。一级缓存,也称为会话缓存(Session Cache),是默认启用的,由Hibernate自动...

    Hibernate二级缓存技术

    – 设置Hibernate缓存提供者为EhCache –> <property name="cache.provider_class">org.hibernate.cache.EhCacheProvider <!– 启用查询缓存 –> <property name="hibernate.cache.use_query_cache">true ``` 同时...

    Hibernate缓存深入详解

    【Hibernate缓存深入详解】 在Java的持久化框架Hibernate中,缓存机制是提升系统性能的关键因素。它位于Hibernate应用和数据库之间,减少了对数据库的直接访问,从而提高了应用程序的运行速度。缓存中存储的是...

Global site tag (gtag.js) - Google Analytics