您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“Mybatis執(zhí)行update失敗怎么解決”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!
今天在進行分布式重構項目的時候碰到一個問題,在執(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進行數(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(); }
“Mybatis執(zhí)行update失敗怎么解決”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。