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(); }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
推荐阅读
-
Silverlight安装失败 报1603错误的解决方法
-
惠普驱动怎么安装 惠普驱动安装以及安装失败的解决方法
-
win7系统无法删除文件提示您需要权限来执行此操作的解决方法
-
Win10开机提示user profile service服务登录失败的原因及解决方法
-
Jquery Ajax请求文件下载操作失败的原因分析及解决办法
-
Sql Server安装出错,安装程序配置服务器失败的解决方法小结
-
SQL Server创建维护计划失败(SQL Server:14234 错误)的解决方法
-
JQuery给元素绑定click事件多次执行的解决方法
-
不可预料的压缩文件末端导致解压文件失败的可能性原因及解决方法
-
在mybatis和PostgreSQL Json字段作为查询条件的解决方案