Mybatis執(zhí)行update失敗的解決
Mybatis執(zhí)行update失敗
今天在進行分布式重構項目的時候碰到一個問題,在執(zhí)行sql的時候只有update不能成功,其他語句都可以正常執(zhí)行,報錯如下: 版本:org.mybatis:mybatis:3.4.5
接口
@UpdateProvider(type = ManagerProvider.class, method = "updateManager") int updateManager(Manager manager) throws Exception;
報錯信息
Loading XML bean definitions from class path resource [org/springframework/jdbc/support/sql-error-codes.xml]
SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase, Hana]
org.springframework.jdbc.UncategorizedSQLException: Error getting generated key or setting result to parameter object. Cause: java.sql.SQLException: 不允許的操作;uncategorized SQLException for SQL []; SQL state [99999]; error code [17090]; 不允許的操作; nested exception is java.sql.SQLException: 不允許的操作
原因
由于mybatis在執(zhí)行insert和update的時候都默認生成key,然后注入,所以在執(zhí)行update的時候會報錯。
解決辦法
在接口上增加注解 @Options(useGeneratedKeys = false),不讓mybatis自動注入key,問題解決。
@UpdateProvider(type = ManagerProvider.class, method = "updateManager") @Options() // @Options(useGeneratedKeys = false) int updateManager(Manager manager) throws Exception;
最后說明一點,版本:org.mybatis:mybatis:3.4.4這個版本沒有此類問題。
Mybatis插入(更新)失敗 卻不報錯
問題描述
mybatis進行數(shù)據(jù)插入或更新操作,方法成功執(zhí)行,數(shù)據(jù)庫中卻不存在新數(shù)據(jù),原本代碼如下:
@Test public void test7() throws IOException { SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); SqlSession sqlSession = sqlSessionFactory.openSession(); EmployeeMapperDynamicSql mapper = sqlSession.getMapper(EmployeeMapperDynamicSql.class); Employee employee = new Employee(null,"gfdhg","456dfgngh@qq.com","female",null); mapper.addEmps(Collections.singletonList(employee)); sqlSession.close(); }
解決方案
在插入或更新語句后,增添commit,代碼如下:
@Test public void test7() throws IOException { SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); SqlSession sqlSession = sqlSessionFactory.openSession(); EmployeeMapperDynamicSql mapper = sqlSession.getMapper(EmployeeMapperDynamicSql.class); Employee employee = new Employee(null,"gfdhg","456dfgngh@qq.com","female",null); mapper.addEmps(Collections.singletonList(employee)); /*添加commit*/ sqlSession.commit(); sqlSession.close(); }
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Spring中Service注入多個實現(xiàn)類的方法詳解
這篇文章主要介紹了Spring中Service注入多個實現(xiàn)類的方法詳解,Spring是一個開源的Java框架,用于構建企業(yè)級應用程序,它提供了許多功能,如依賴注入、面向切面編程、數(shù)據(jù)訪問、Web開發(fā)等,需要的朋友可以參考下2023-07-07Vue中computed計算屬性和data數(shù)據(jù)獲取方式
這篇文章主要介紹了Vue中computed計算屬性和data數(shù)據(jù)獲取方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03解讀Spring接口方法加@Transactional失效的原因
這篇文章主要介紹了Spring接口方法加@Transactional失效的原因解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03可能是全網(wǎng)最詳細的springboot整合minio教程
MinIO是全球領先的對象存儲先鋒,在標準硬件上,讀/寫速度上高達183 GB/秒和171 GB/秒,下面這篇文章主要給大家介紹了關于springboot整合minio的相關資料,這個教程可能是全網(wǎng)最詳細的,需要的朋友可以參考下2022-06-06Java經(jīng)典設計模式之模板方法模式定義與用法示例
這篇文章主要介紹了Java經(jīng)典設計模式之模板方法模式,簡單說明了模板方法模式的原理、定義,并結合實例形式分析了java模板方法模式的具體使用方法,需要的朋友可以參考下2017-08-08