`

关于spring+hibernate的FlushMode的记录

阅读更多

参见hibernate的api说明https://www.hibernate.org/hib_docs/v3/api/org/hibernate/FlushMode.html

说明FlushMode有五种属性

NEVEL   

已经废弃了,被MANUAL取代了


2 MANUAL  

spring3.x中的opensessioninviewfilter已经将默认的FlushMode设置为MANUAL了;
如果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;
解决办法网上有很多;
1 配置事务,spring会读取事务中的各种配置来覆盖hibernate的session中的FlushMode;
2 先编程式修改FlushMode,比如session.setFlushMode(FlushMode.AUTO); 这样hibernate就会自动去除readonly限制;
3 直接修改opensessioninviewfilter过滤器的配置,配置过滤器的时候配置
<filter>
      <filter-name>openSession</filter-name>
      <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
      <init-param>
          <param-name>flushMode</param-name>
          <param-value>AUTO</param-value>
      </init-param>
  </filter>

3 AUTO

设置成auto之后,当程序进行查询、提交事务或者调用session.flush()的时候,都会使缓存和数据库进行同步,也就是刷新数据库

4 COMMIT

提交事务或者session.flush()时,刷新数据库;查询不刷新


5 ALWAYS

每次进行查询、提交事务、session.flush()的时候都会刷数据库
这里需要说一下和AUTO的区别,当hibernate缓存中的对象被改动之后,会被标记为脏数据(即与数据库不同步了)。当session设置为FlushMode.AUTO时,hibernate在进行查询的时候会判断缓存中的数据是否为脏数据,是则刷数据库,不是则不刷,而always是直接刷新,不进行任何判断。很显然auto比always要高效得多。

转自:http://www.blogjava.net/landor2004/archive/2009/11/25/303701.html

分享到:
评论

相关推荐

    spring_demo:Spring MVC示范项目

    Spring MVC Hibernate Demo Hibernate 配置 数据库实体必须设置以下注解 @Entity @Id 自增主键必须设置以下注解,否则报错 @GeneratedValue(strategy = GenerationType.IDENTITY) 在更新或删除数据时,必须调用...

    使用Spring引起的错误

    使用Spring提供的Open Session In View而引起Write operations are not allowed in read-only mode (FlushMode.NEVER) 错误解决

    jSP在线教学质量评价系统的设计与实现(源代码)

    在线教学质量评价系统可以方便和全面地收集教师教学工作的数据,提供师生网上评教的评分结果,快速集中收集各方面的评教信息,使教务管理部门能够及时了解教学动态和师资情况,为教务老师提供相关决策支持,为职称评聘提供教学工作质量的科学依据,同时减轻了教务老师的工作量。

    python-3.10.7-amd64.zip

    python-3.10.7-amd64.zip

    自研扩散模型高光谱修复网络

    自研扩散模型高光谱修复网络 基于MST_Plus_Plus 网络改造。 试验数据 扩散模型loss初步测试降到了0.005,比不加扩散loss小了20倍, 训练入口 train_cos_img.py

    企业数据治理之数据安全治理方案.pptx

    企业数据治理之数据安全治理方案

    毕业设计基于Android的一个红外防盗报警源码.zip

    这是历年的毕业设计的项目,基于Android的一个红外防盗报警。需要自己添加蜂鸣器和热释电的硬件访问服务。

    短视频用户价值研究报告2022

    短视频用户价值研究报告2022

    基于springboot的食堂管理系统.zip

    基于springboot的java毕业&课程设计

    50.基于SSM的停车场管理系统的设计与实现-基于SSM+ Mysql+Java设计与实现(可运行源码+数据库+lw)毕业设计管

    可运行源码(含数据库脚本)+开发文档+lw(高分毕设项目) java期末大作业毕业设计项目管理系统计算机软件工程大数据专业 内容概要:首先在日常的出行中,老旧城区道路狭窄,容易造成车辆的堵塞,每天早晚,接送孩子的车辆数密集,会造成相应的交通堵塞情况。而同样的,在停车的管理上,一方面我国的停车场面积较少,停车位一位难求,特别是在现在的一些小区里,为了抢停车位而产生的矛盾也日益突出。另一方面在停车场的管理上也存在着较大的管理问题,进车容易出车难是当下的停车场所出现的主要问题。而现在的停车场管理系统眼花缭乱,效果水平也良莠不齐,停车场的管理是当下各大城市的公共设施发展的一大难题,而国家、各大省市也都开 全套项目源码+详尽文档,一站式解决您的学习与项目需求。 适用人群: 计算机、通信、人工智能、自动化等专业的学生、老师及从业者。 使用场景及目标: 无论是毕设、期末大作业还是课程设计,一键下载,轻松部署,助您轻松完成项目。 项目代码经过调试测试,确保直接运行,节省您的时间和精力。 其他说明: 项目整体具有较高的学习借鉴价值,基础能力强的可以在此基础上修改调整,以实现不同的功能。

    基于SpringBoot的新闻管理发布系统,新闻后台管理系统。.zip

    基于springboot的java毕业&课程设计

    微信小程序设计-金融行业.rar

    微信小程序设计之相关行业源码及图文导入教程

    JAVA泡泡堂网络游戏的设计与实现(源代码+lw).zip

    网络游戏开发是一项很大的工程,需要很多综合性的知识。这对于刚刚入门的开发者来说很难理解。本论文从研究开发一个模仿泡泡堂网络游戏的例子出发,讲述网络游戏开发中用到的一些最基本的知识和设计思想,使大家清晰的理解游戏开发的过程。 整个设计中利用java中的swing编程,结合游戏的操作流程,对整个游戏进行精心的设计和大量的测试,实现游戏软件服务器端和客户端的开发,为玩家提供一个友好美观的操作界面,并添加聊天等功能以增加玩家之间的互动性,此外实现了可编辑场景地图的功能,使得游戏内容的更加丰富,玩家交互性更好,确保了游戏更具有趣味性、灵活性,以满足玩家对这款网络游戏的要求。

    外东洪路中段.m4a

    外东洪路中段.m4a

    软考3333333333

    软考3333333333

    Elasticsearch 的全文搜索功能使用方法

    附件是Elasticsearch 的全文搜索功能使用方法,文件绿色安全,请大家放心下载,仅供交流学习使用,无任何商业目的!

    CosmoChron:一种使用宇宙成因核素和直接年龄限制的多功能年龄深度建模方法matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    基于springboot + websocket + html5 canvas打造网络版坦克大战.zip

    基于springboot的java毕业&课程设计

    CCNP TSHOOT 642-832 Official Certification Guide

    CCNP TSHOOT 642-832 Official Certification Guide

Global site tag (gtag.js) - Google Analytics