`
- 浏览:
501190 次
- 性别:
- 来自:
上海
-
Hibernate session FlushMode详解
[size=medium]Hibernate session FlushMode有五种属性:
1、NEVEL:已经废弃了,被MANUAL取代了
2 MANUAL:www.2cto.com
如果FlushMode是MANUAL或NEVEL,在操作过程中hibernate会将事务设置为readonly,所以在增加、删除或修改操作过程中会出现如下错误
org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER) - turn your Session into FlushMode.AUTO or remove 'readOnly' marker from transaction definition;
解决办法:配置事务,spring会读取事务中的各种配置来覆盖hibernate的session中的FlushMode;
3 AUTO
设置成auto之后,当程序进行查询、提交事务或者调用session.flush()的时候,都会使缓存和数据库进行同步,也就是刷新数据库
4 COMMIT
提交事务或者session.flush()时,刷新数据库;查询不刷新
5 ALWAYS:
每次进行查询、提交事务、session.flush()的时候都会刷数据库
ALWAYS和AUTO的区别:当hibernate缓存中的对象被改动之后,会被标记为脏数据(即与数据库不同步了)。当 session设置为FlushMode.AUTO时,hibernate在进行查询的时候会判断缓存中的数据是否为脏数据,是则刷数据库,不是则不刷,而always是直接刷新,不进行任何判断。很显然auto比always要高效得多。[/size]
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
### HIbernate Session 详解 #### 一、Session在Hibernate中的地位及作用 在Hibernate框架中,`Session` 是一个非常核心且重要的组件。作为Hibernate提供的主要操作数据库的接口,`Session` 不仅承担着保存、更新...
因为`Open Session In View`默认采用`FlushMode.NEVER`,这意味着Hibernate不会自动刷新session来同步数据库的变化。为了避免这个问题,可以采取以下几种解决办法: 1. **更改Flush Mode**:将`FlushMode`设置为`...
**hibernate二级缓存详解** 在Java的持久化框架Hibernate中,缓存是一种重要的优化手段,它能够显著提升数据库操作的效率。本项目提供的工程示例深入探讨了Hibernate的一级缓存和二级缓存机制,并通过实际运行验证...
Hibernate支持一级缓存(Session级别)和二级缓存(SessionFactory级别)。一级缓存自动管理,而二级缓存可配置第三方缓存提供者如EhCache,提升性能。 10. **优化技巧**: - 使用批处理:通过`flushMode`和`...
- 使用Session的flushMode设置控制何时将脏数据同步到数据库。 8. 链接其他技术: - Spring框架集成:Spring提供了对Hibernate的支持,简化了配置和事务管理。 - JPA集成:Hibernate作为JPA的实现,可以使用JPA...
### hibernate-note学习笔记知识点详解 #### 一、对象持久化 **1.1 概述** 对象持久化是指将程序中的对象状态保存到非易失性存储中(如硬盘或磁盘等),以便在系统重启后仍能保留这些状态。这种技术常用于将对象的...
### Hibernate中文教程知识点详解 #### 一、简介与概述 **Hibernate** 是一款开源的对象关系映射(ORM)框架,它允许开发人员将Java对象映射到数据库表中,简化了数据持久化层的开发工作。该教程由一个技术翻译...
### Criteria的完整用法详解 #### 一、概述 在基于Spring和Hibernate的项目开发中,Criteria API提供了灵活且强大的查询功能,使开发者能够轻松构建复杂的查询条件,从而提高数据检索的效率与精确度。本文将深入...
- **设置Session冲刷模式**:通过`setFlushMode(FlushMode mode)`设置Session冲刷模式。 - **设置数据库锁模式**:使用`setLockMode(LockMode mode)`设置数据库锁模式。 #### 五、小结 通过上述介绍,我们可以看出...