Session 缓存概述
Session级别的缓存是Hibernate的一级缓存,主要提供事务级别的缓存处理,用来提高访问数据库的性能等.
在Session的接口实现中包含一系列的java集合,这些集合构成了Session的缓存.
只要Session实例没有结束生命周期,存放在它缓存中的对象也不会结束生命周期.
当Session 通过save()方法持久化一个对象时,这个对象被加入到Session缓存中去, 这以后,只要缓存没有被清空,这个对象就被存储在Session的集合对象中,即存在于缓存之中.
当Session 通过get()方法试图从数据库中得到一个对象时, Session会先判断这个对象是否已经存在与缓存中, 如果存在这从缓存中获得, 从而避免访问数据库, 提高了性能.
Session 缓存的作用
(1) 减少访问数据库的频率.
(2) 当缓存中的持久化对象之间存在循坏关联关系时,Session会保证不出现访问对象图的死循环, 以及由死循环引起的JVM堆栈溢出异常.
(3) 保证数据库中的相关记录和缓存中相应的对象保持同步.
Note: Session 在清理缓存的时候,会自动进行脏检查, 如果发现Session缓存中的对象和数据库的不一致,则会根据对象的最新属性去同步更新数据库.
脏检查及清理缓存的机制
当一个对象被加入到Session的缓存中的时候,Session 会为这个对象复制一份快照, 当session 清理缓存的时候, 将用最新的对象和快照进行对比来判断对象是否经过了更新, 然后根据脏对象的最新属性生成相关SQL语句 更新数据库.
Session 清除缓存的默认时间点
(1) 当程序调用hibernate Transaction的commit()方法的时候, commit方法先清理缓存(调用Session的 flush()方法), 然后再向数据库提交事务.
(2) 当程序执行一些查询操作的时候, 如果缓存中的持久化对象属性以及发生了变化, 就会先清理缓存, 使得缓存与数据库进行同步.
(3) 当程序显示的调用Session的 flush方法的时候.
如果不希望Session 在以上默认的时间点进行缓存的清理, 也可以通过Session 的 setFlushMode()方法来显示的设定删除的时间点.
FlushMode 类定义了3种不同的清理模式: FlushMode.AUTO, FlushMode.COMMIT和FlushMode.NEVER.
清理缓存的模式 |
各种查询方法 |
Transaction的commit()方法 |
Session的flush()方法 |
FlushMode.AUTO(默认) |
清理 |
清理 |
清理 |
FlushMode.COMMIT |
不清理 |
清理 |
清理 |
FlushMode.NEVER |
不清理 |
不清理 |
清理 |
Flush()方法适用场合
(1) 插入,删除或更新某个持久化对象会引发数据库的触发器.
(2) 在应用程序中混合使用hibernaye API和JDBC API.
(3) JDBC驱动程序不健壮, 自动清理模式中无法正常清理.
分享到:
相关推荐
总的来说,理解和熟练运用Hibernate的缓存机制以及Session的管理方式,对于优化应用性能、减少数据库负载至关重要。在实际开发中,开发者应根据项目需求和性能要求,合理配置和使用缓存,以及选择合适的Session管理...
Hibernate缓存机制是提高应用程序性能的关键特性,尤其是在频繁与数据库交互的应用中。缓存通过减少对物理数据库的直接访问次数,...正确理解和利用这些缓存策略,能够极大地提升基于Hibernate的应用程序的运行效率。
首先,理解什么是Hibernate Session。Session是Hibernate中的核心接口,它充当了应用程序和数据库之间的桥梁,负责对象的持久化操作,如保存、更新、删除和查询等。Session通常在一个事务中打开并在事务结束时关闭,...
### Hibernate的映射、三态、脏数据、Session缓存详解 #### 一、Hibernate映射 **Hibernate映射**是Hibernate框架的核心功能之一,它实现了Java对象与数据库表之间的映射关系。通过这种方式,开发人员可以使用面向...
在Java的持久化框架Hibernate中,`...理解并正确使用这两个接口是进行高效、可靠的Hibernate编程的关键。在实际应用中,应根据业务需求和性能考虑,合理地管理`Session`和`Transaction`,确保数据的完整性和一致性。
在Java的持久化框架Hibernate中,Session对象是与数据库交互的核心组件,它负责管理对象的持久状态。在处理大量数据或者长时间运行的事务时,合理地管理Session的生命周期至关重要,这就涉及到了Hibernate的Session...
一级缓存(Session缓存)** 一级缓存是Hibernate默认开启且无法关闭的。它是一个事务范围的缓存,与Session的生命周期绑定。当一个Session被创建时,一级缓存也随之创建,并在Session关闭时销毁。一级缓存中存储的...
本示例将深入探讨Hibernate Session的生命周期及其使用,帮助你更好地理解和运用这个强大的工具。 Hibernate Session是Hibernate的核心接口,它是与数据库交互的主要接口。Session对象负责管理实体对象的状态,包括...
一级缓存是Hibernate默认提供的缓存,它是每个Session级别的,也被称为事务级缓存。当我们在Session中进行对象的增删改查操作时,这些对象会被放入一级缓存中。一级缓存的作用在于避免频繁地与数据库交互,提高效率...
6. **第一级缓存**:每个Session都有一个内置的第一级缓存,也称为Session缓存。当对象被加载或保存时,它们会被放入这个缓存中。同一Session内的多次查询可以避免重复的数据库访问,提高了性能。 7. **二级缓存**...
Hibernate的缓存机制分为两层:第一级缓存(Session缓存)和第二级缓存(SessionFactory缓存)。这两种缓存分别服务于不同的应用场景和目的。 ##### 1. 第一级缓存(Session缓存) - **定义**:第一级缓存是在`...
它是一个事务范围的缓存,也就是说,每个 Hibernate Session 对应一个一级缓存,仅在当前事务中有效。一级缓存主要存储了 Session 在当前事务中加载和修改的对象实例。当 Session 执行 CRUD 操作时,对象会自动放入...
一级缓存是Hibernate内置的Session缓存,它是每个Session实例独享的。当我们在Session中对对象进行操作时,如保存、更新或删除,Hibernate首先会检查这个对象是否已经在一级缓存中。如果在,那么直接在内存中处理,...
一级缓存,也称为会话缓存(Session Cache),是默认启用的,由Hibernate自动管理。它存储了当前会话期间加载的所有实体对象和关联的集合对象。当会话关闭时,一级缓存中的数据会被清除。一级缓存的主要作用是减少对...
一级缓存,也称为session缓存,是每个Hibernate Session内部管理的一个内存结构。在本篇文章中,我们将深入探讨一级缓存的工作原理、作用以及如何有效地利用它。 ### 一级缓存的工作机制 1. **对象持久化过程**:...
### Hibernate的缓存策略 #### 一、缓存的基本概念 缓存技术是现代软件架构设计中的重要组成部分,尤其在数据库交互频繁的应用场景下尤为重要。简单来说,缓存是一种存储技术,位于应用程序与物理数据之间,目的是...
**第一级缓存**是内置在Session中的,它是不可卸载的,也称为Session缓存。每当操作实体对象时,Hibernate会自动将这些对象放入第一级缓存。这层缓存是线程安全的,因为它与Session绑定,每个Session有自己独立的...
**hibernate一级缓存、二级缓存和查询缓存** 在Java的持久化框架Hibernate中,...理解并掌握这些缓存机制,对于优化Hibernate应用至关重要。在实践中,合理配置和管理缓存,是每个专业Java开发人员必备的技能之一。