InvalidDataAccessApiUsageException:Write operations are not allowed in read-only mode (FlushMode.NEV

本文主要是介绍InvalidDataAccessApiUsageException:Write operations are not allowed in read-only mode (FlushMode.NEV,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

错误截图:
不能在只读模式下进行写操作
错误描述:
org.springframework.dao.InvalidDataAccessApiUsageException:Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove ‘readOnly’ marker from transaction definition.

尝试了以下三种方法
1、修改web.xml的配置,添加:flushMode为true

 <filter><filter-name>OpenSessionInViewFilter</filter-name><filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class><init-param><param-name>sessionFactoryBeanName</param-name><param-value>mySessionFactory</param-value></init-param><init-param><param-name> flushMode </param-name<param-value>AUTO</param-value> </init-param></filter>

2、或者在spring_hibernate_cfg.xml配置文件中设置read-only=”false”

<aop:config><aop:pointcut id="bussinessService" expression="execution(* com.fan.service.base.*.*(..))" /><aop:advisor pointcut-ref="bussinessService" advice-ref="txAdvice" /></aop:config><tx:advice id="txAdvice" transaction-manager="txManager"><tx:attributes><tx:method name="get*" read-only="false" propagation="NOT_SUPPORTED"/><tx:method name="find*" read-only="false" propagation="NOT_SUPPORTED"/><tx:method name="save*" propagation="REQUIRED"/> <tx:method name="update*" propagation="REQUIRED"/><tx:method name="delete*" propagation="REQUIRED"/></tx:attributes></tx:advice> 

3、或者在BaseDao的相应方法处添加

@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW )

均没有解决该问题,如果项目较大的话,改配置文件影响很大,不建议用修改配置文件的方式进行处理,该问题最后找到的原因是:
在getXX()方法中调用了saveXX()方法,因为上层方法getXX()是只读的,所以在方法体内的方法都默认是只读的,即使saveXX()不是只读的也无效。
修改方式:将saveXX()的所有上层方法都修改为spring配置文件中拥有read-only=”false”方法名开头,例如:
配置文件:

    <tx:advice id="txAdvice" transaction-manager="txManager"><tx:attributes>     <tx:method name="add*" propagation="REQUIRED" /><tx:method name="insert*" propagation="REQUIRED" /><tx:method name="check*" propagation="REQUIRED" /><tx:method name="insert*" propagation="REQUIRED" /><tx:method name="update*" propagation="REQUIRED" /><tx:method name="exchange*" propagation="REQUIRED" />           <tx:method name="*" read-only="true" /></tx:attributes></tx:advice>

则将方法getXX()更改为exchangeXX()就可以解决这个问题。

这篇关于InvalidDataAccessApiUsageException:Write operations are not allowed in read-only mode (FlushMode.NEV的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/234388

相关文章

DBeaver 连接 MySQL 报错 Public Key Retrieval is not allowed

DBeaver 连接 MySQL 报错 Public Key Retrieval is not allowed 文章目录 DBeaver 连接 MySQL 报错 Public Key Retrieval is not allowed问题解决办法 问题 使用 DBeaver 连接 MySQL 数据库的时候, 一直报错下面的错误 Public Key Retrieval is

vue 父组件调用子组件的方法报错,“TypeError: Cannot read property ‘subDialogRef‘ of undefined“

vue 父组件调用子组件的方法报错,“TypeError: Cannot read property ‘subDialogRef’ of undefined” 最近用vue做的一个界面,引入了一个子组件,在父组件中调用子组件的方法时,报错提示: [Vue warn]: Error in v-on handler: “TypeError: Cannot read property ‘methods

Unstructured cannot write mode RGBA as JPEG 错误解决

Unstructured cannot write mode RGBA as JPEG 错误解决 0. 错误详细1. 解决方法 0. 错误详细 Image Extraction Error: Skipping the failed imageTraceback (most recent call last):File "/root/miniconda3/envs/learn-y

[轻笔记] pip install : Read timed out. (closed)

添加超时参数(单位秒) pip --default-timeout=10000 install ${package_name}

Cannot read property ‘length‘ of null while opening vscode terminal

同一问题地址:Cannot read property ‘length’ of null while opening vscode terminal 问题描述 One day, 我在ubuntu 18.04下用vscode打开一个项目,并想和往常一样在vscode使用终端,发现报错Cannot read property 'length' of null。 解决 打开setting.jso

70-java write类应用场景

在Java中,我们可以使用java.io包中的FileWriter和BufferedWriter类来写入数据到文件。以下是一个简单的例子,展示了如何使用FileWriter和BufferedWriter来写入数据到文件: import java.io.BufferedWriter;import java.io.FileWriter;import java.io.IOException;pub

SylixOS write 0 字节问题

1 问题描述 在移植中间件过程中,在SylixOS调用write函数写入0字节的数据到文件中时,会导致对应的中间件测试用例失败,失败的原因是文件系统中的write函数在Linux系统和SylixOS有区别,两种实现的差别如下。 2 write函数的实现机制 2.1 SylixOS实现机制 在SylixOS下通过write 函数写数据到普通文件中时,第一步会判断写入的数据是否为0,如果是0直

王立平--Failed to push selection: Read-only file system

往android模拟器导入资源,失败。提示:只读文件、 mnt是只读文件。应点击sdcard,,在导入

Java 入门指南:Java 并发编程 —— Copy-On-Write 写时复制技术

文章目录 Copy-On-Write使用场景特点缺点CopyOnWrite 和 读写锁相同点之处不同之处 CopyOnWriteArrayList适用场景主要特性方法构造方法CopyOnWriteArrayList 使用示例 CopyOnWriteArraySet适用场景主要特性方法构造方法使用注意事项CopyOnWriteArraySet 使用示例 Copy-On-Writ

混合模式属性background-blend-mode

background-blend-mode 是 CSS 中的一个属性,它允许你将背景图像与背景颜色或背景图像之间以一种特定的混合模式进行混合。这个属性为网页设计师提供了一种强大的方式来创建视觉上吸引人的背景效果,无需使用图像编辑软件或额外的图像文件。 background-blend-mode 可以应用于单个背景图像与背景颜色之间,或者当设置多个背景图像时,应用于这些图像之间。混合模式包括了许多