Mybatis执行update失败的解决
mybatis执行update失败
今天在进行分布式重构项目的时候碰到一个问题,在执行sql的时候只有update不能成功,其他语句都可以正常执行,报错如下: 版本: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在执行insert和update的时候都默认生成key,然后注入,所以在执行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进行数据插入或更新操作,方法成功执行,数据库中却不存在新数据,原本代码如下:
@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(); }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
上一篇: springMVC实现文件上传和下载
推荐阅读
-
PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法
-
Visual Studio 2017安装失败的解决方法
-
Win7使用金山毒霸提示“安装引擎失败,不支持此接口”的解决方法
-
电脑没有开启VT海马玩模拟器vt检测失败的解决方法
-
sql server 2000管理单元初始化失败的解决方法
-
百度云下载失败120000怎么办?百度云盘及百度云管家下载失败的解决办法
-
迅雷下载失败提示文件被其他程序占用的解决方法
-
迅雷下载失败并提示“文件被其他程序占用”的解决办法介绍
-
百度云下载失败且提示120000的解决方法
-
绕过百度云管家直接下载文件及百度云盘下载失败的解决方法