首页 > 其他分享 >InvalidDataAccessApiUsageException 和 Write operations are not allowed in read-only mode 解决方法

InvalidDataAccessApiUsageException 和 Write operations are not allowed in read-only mode 解决方法

时间:2024-09-23 18:16:03浏览次数:6  
标签:operations read Write only mode InvalidDataAccessApiUsageException

InvalidDataAccessApiUsageException 和 Write operations are not allowed in read-only mode 解决方法
2016年04月07日 12:35:02 阅读数:14221

这些天写webservice,一直在测接口,get方法都没问题,就从昨晚开始测save方法的时候出现了这个错误

Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn your Session into FlushM

搜了一下,有这样一种说法

原因一:
这个异常产生的主要原因是DAO采用了Spring容器的事务管理策略,如果操作方法的名称和事务策略中指定的被管理的名称不能够匹配上,spring 就会采取默认的事务管理策略(PROPAGATION_REQUIRED,read only).如果是插入和修改操作,就不被允许的,所以包这个异常

原因二:
在网上搜了一下,其中大多数文章又是提OpenSessionInViewFilter又是提OpenSessionInViewInterceptor的,大多云山雾罩、不知所云。(网上提到OpenSessionInViewFilter,因为缺省分配的Session是FlushMode.NEVER的,所以需要在程序中修改自己期望的Mode。收录这篇文章是因为和前一篇文章有关联。)

其实这个异常的提示还是很明确的:在只读模式下(FlushMode.NEVER/MANUAL)写操作不被允许:把你的Session改成FlushMode.COMMIT/AUTO或者清除事务定义中的readOnly标记。

但是我的配置文件(web.xml)中是有这个的

<init-param>
     <param-name>flushMode</param-name>
     <param-value>AUTO</param-value>
</init-param>

天真啊,加了转义符,开始提示格式错误!! 我了个崩溃啊

Missing value. at character  of

弄了6个+小时没搞清楚咋回事,默默的睡觉去了

早上十点起来继续搞,还是不行,灰心去测一下delete,给的错误提示是这样的:

No message body writer has been found for response class InvalidDataAccessApiUsageException.

我查了InvalidDataAccessApiUsageException这个异常是咋回事,发现还是事务管理的问题,开始让我确定这个bug就是这的错

好吧,以下又尝试了在单独的方法上面加以下,失败了

@Transactional(readOnly = false)
  • 1

又在spring配置文件里面加以下代码,又失败了。。

<tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="save*" propagation="REQUIRED" />
            <tx:method name="add*" propagation="REQUIRED" />
            <tx:method name="create*" propagation="REQUIRED" />
            <tx:method name="insert*" propagation="REQUIRED" />
            <tx:method name="update*" propagation="REQUIRED" />
            <tx:method name="merge*" propagation="REQUIRED" />
            <tx:method name="del*" propagation="REQUIRED" />
            <tx:method name="remove*" propagation="REQUIRED" />
            <tx:method name="put*" propagation="REQUIRED" />
            <tx:method name="use*" propagation="REQUIRED" />
            <tx:method name="recordOperLog" propagation="REQUIRED" />
            <!--hibernate4必须配置为开启事务 否则 getCurrentSession()获取不到 -->
            <tx:method name="get*" propagation="REQUIRED" read-only="true" />
            <tx:method name="count*" propagation="REQUIRED" read-only="true" />
            <tx:method name="find*" propagation="REQUIRED" read-only="true" />
            <tx:method name="list*" propagation="REQUIRED" read-only="true" />
        </tx:attributes>
    </tx:advice>

 

 

啊啊啊,最后我在BaseDao上加了一句,吼吼,好了!

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

总结了一下,想到,就算我在单独方法那写,我调的父方法是BaseDao里面的,还是的治住根本!!

这次长记性了!

标签:operations,read,Write,only,mode,InvalidDataAccessApiUsageException
From: https://www.cnblogs.com/520future/p/8996670.html

相关文章

  • Paper Reading(2)-Audio Generation with Multiple Conditional Diffusion Model
    AudioGenerationwithMultipleConditionalDiffusionModel来源:http://export.arxiv.org/abs/2308.11940https://conditionaudiogen.github.io/conditionaudiogen/主要贡献:1)引入了一个新的任务,该任务可生成由文本和控制条件指导的音频,从而能够使用时间戳、音高轮廓和能量......
  • Paper Reading(1)-VarietySound: Timbre-Controllable Video to Sound Generation via U
    VarietySound:Timbre-ControllableVideotoSoundGenerationviaUnsupervisedInformationDisentanglement来源:https://doi.org/10.48550/arXiv.2211.10666https://conferencedemos.github.io/icassp23/主要贡献:1)定义了一个新的任务,称为timbre-controlledvideo-to-audi......
  • 进程已结束,退出代码为 -1073740791 (0xC0000409)。QThread: Destroyed while thread i
            在使用pycharm写代码发现代码运行不了,进程已结束,退出代码为-1073740791(0xC0000409),但是又不提示具体错在哪。为了得到更加清晰的错误原因,可如下操作:        ①点击debug旁边的三个小点moreactions,点击编辑。        ②勾选在控制台中......
  • SQLSTATE[HY000] [2013] Lost connection to MySQL server at 'reading initial commu
    错误信息 SQLSTATE[HY000][2013]LostconnectiontoMySQLserverat'readinginitialcommunicationpacket',systemerror:111 表示在尝试与MySQL服务器建立连接时出现了问题,具体来说是在读取初始通信包时失去了与MySQL服务器的连接,系统错误码为111,这通常表示连接被拒绝......
  • 【CTF Web】BUUCTF SQLi-LABS Page-1(Basic Challenges) Less-6 Writeup(SQL注入+GET请
    sqli-labs1点击启动靶机。SQLi-LABSPage-1(BasicChallenges)原理双注入模板:selectcount(*),concat(([payload]),floor(rand(0)*2))asafrom[table_name]groupbya解法发送GET请求,id作为参数。http://b3f804a6-9ba6-418d-ac25-bf8d48589b62.node5.......
  • 【CTF MISC】XCTF GFSJ1103 BotW- Writeup(文件提取+希卡文)
    BotW-MASTERUSINGITANDYOUCANHAVETHIS.全小写,格式为flag{[a-z]*}原理希卡文希卡文是游戏《塞尔达传说:旷野之息》中的一种虚构文字。工具SheikahTextTranslator:https://www.dcode.fr/sheikah-language解法用StegSolve检查,没有发现信息。用binwalk......
  • windows源码ReadFile函数的实现
    windows源码ReadFile函数的实现windows源码ReadFile函数的实现文章目录windows源码ReadFile函数的实现ReadFileReadFileBOOLWINAPIReadFile(HANDLEhFile,LPVOIDlpBuffer,DWORDnNumberOfBytesToRead,LPDWORDlpNumberOfBytesRead,L......
  • 【Java】了解线程 Thread 类的使用,
    线程是什么线程是操作系统中调度的基本单位,是比进程更小的执行单元。线程在进程内部运行,共享该进程的资源,如内存和文件句柄,但每个线程都有自己的执行栈和程序计数器。线程的主要特点包括:轻量级:线程相较于进程更加轻量,创建和销毁的开销较小。共享资源:同一进程中的线程共享该进程的内......
  • 【Java】深入解析ThreadLocal——Java并发编程的秘密武器
            ThreadLocal被称为线程局部变量,用于在线程中保存数据。由于在ThreadLocal中保存的数据仅属于当前线程,所以该变量对其他线程而言是隔离的,也就是说该变量是当前线程独有的变量。        ThreadLocal用于在同一个线程间,在不同的类和方法之间共享数据......
  • Linux: while read 循环丢失最后一行的问题及解决方案
    在Linux的Shell编程中,使用whileread循环来逐行读取文件内容是一种常见的操作。然而,许多人在使用whileread时会遇到一个问题:文件的最后一行可能不会被读取,尤其是当最后一行没有换行符时。这里将探讨这个问题的原因,并提供相应的解决方案。问题概述在Bash中,read......