在使用整合的Spring框架時(shí),出現(xiàn)這種問(wèn)題Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.

最近在配置 Structs, spring 和hibernate整合的問(wèn)題:開(kāi)啟OpenSessionInViewFilter來(lái)阻止延遲加載的錯(cuò)誤的時(shí)候拋出了這個(gè)異常:    org.springframework.dao.InvalidDataAccessApiUsageException錯(cuò)誤但是在我們開(kāi)啟OpenSessionInViewFilter這個(gè)過(guò)濾器的時(shí)候FlushMode就已經(jīng)被默認(rèn)設(shè)置為了MANUAL!如果FlushMode是MANUAL或NEVEL,在操作過(guò)程中 hibernate會(huì)將事務(wù)設(shè)置為readonly,所以在增加、刪除或修改操作過(guò)程中會(huì)出現(xiàn)如下錯(cuò)誤: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;

首先說(shuō)一個(gè)最直接明了的方法,在XXXServiceImpl類(lèi)上加注解:@Transactional?? --基本上加了問(wèn)題就解決了,如果解決不了,再看下面這類(lèi)啰里啰嗦的方法試試

解決辦法1:    直接修改OpenSessionInViewFilter過(guò)濾器的配置,配置過(guò)濾器的時(shí)候配置就是在一般的配置里面加上下面藍(lán)色部分就可以了,直接指定flushMode的配置就OK了:下面是配置文件:(web.xml)[html] view plain copyOpenSessionInViewFilterorg.springframework.orm.hibernate3.support.OpenSessionInViewFilterflushModeAUTOOpenSessionInViewFilter/*

解決方法2:    就是配置事務(wù)的邊界,在你方法的執(zhí)行時(shí)配置事務(wù)邊界!下面是sessionFactor.xml配置:[html] view plain copy

下面是總結(jié):原理:因?yàn)榕渲胦penSessionInView時(shí),啟動(dòng)后他默認(rèn)是給沒(méi)有配置事務(wù)邊界的方法都默認(rèn)為只讀的,所以在插入數(shù)據(jù)時(shí)就會(huì)報(bào)上面的錯(cuò)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容