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 類型的字段不一致。查詢表的匯總會出問題!!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM