mybatis--org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
mysql在入库的时候报这个错
一般的原因
Mapper interface和xml文件的定义对应不上,需要检查包名,namespace,函数名称,方法名称等能否对应上。
按以下步骤一一执行:
1、检查xml文件 和 interface 是否在一个包下
2、检查xml文件的namespace 是否和 interface 一一对应
3、检查接口的方法名是否和xml的id 一致。
5、去掉xml文件中的中文注释
6、随意在xml文件中加一个空格或者空行然后保存
我后面发现是xml里面没有 方法对应的sql【意不意外】。
修改完成后,测试环境保存成功,结果在生产上报如下错误
liuzhizhi@lzz-rmbp|sakila-db # mysql -uroot -p < sakila-data.sql Enter password: ERROR 1785 (HY000) at line 81: When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, updates to non-transactional tables can only be done in either autocommitted statements or single-statement transactions, and never in the same statement as updates to transactional tables.
查了一下发现是和mysql的存储引擎有关系,
因为代码里有这样的语句
public void insert(TInterfaceLogNew interfaceLogVoNew, TInterfaceLogNewConcent interfaceLogNewConcent) { logger.info("[接口日志]保存开始."); interfaceLogNewConcentDao.insert(interfaceLogNewConcent); interfaceLogNewDao.insertLog(interfaceLogVoNew); logger.info("[接口日志]保存成功."); }
这个方法是在一个事物里面的,而 t_interface_log_new_concent 的表的 引擎是InnoDB
另一个表的引擎是 MyISAM,
后来将表都改为 InnoDB,入库不报错。
但是 有几张表是进行了分表,需要 关联查询的。
查询会报错
最后的解决方案是 所有这几张表都改为: MyISAM。
==============================================后续
前几天在测试环境测试数据,修改了其中一张表的字段长度。
然后就报这个错了
注意注意,这几张分表是荣辱与共的关系,唇寒齿亡!!
所有的 表的结构(索引、引擎、列、字符集等)要完全一致,完全!全!
如果 几张表的 decimal 类型的字段不一致。查询表的汇总会出问题!!