mybatis-plus插入失敗的問題及解決
mybatis-plus插入失敗
如果你也是這種錯誤代碼
{ "timestamp": "2023-07-29T09:23:17.218+0000", "status": 500, "error": "Internal Server Error", "message": "nested exception is org.apache.ibatis.reflection.ReflectionException: Could not set property 'id' of 'class com.wang.entity.Users' with value '1685219432365821953' Cause: java.lang.IllegalArgumentException: argument type mismatch", "path": "/api/insertUser" }
那么估計也是這個問題,這是由于數(shù)據(jù)庫中的id設置為自增之后,調用接口是傳入的JSON數(shù)據(jù)不帶id或者id為null的時候,由于MyBatis的自動映射機制,會嘗試把查詢結果中的每一列,映射到對應的Java對象屬性中。
所以在插入完成后,MyBatis還會試圖把生成的id,映射設置到Users對象的id屬性中。
但因為你沒有傳id參數(shù),導致類型不匹配,從而報錯。
解決方法
調用接口時id設置為0,或者在接口上設置user.setId(0);
Mybatis Plus插入數(shù)據(jù)事務控制常見異常、報錯問題
報錯:
No value for key,Transaction is already completed,ResultSet is from UP
場景:
在手動控制事務中,使用全局事務管理器對象,正常插入數(shù)據(jù)、或批量、或使用線程池開啟多線程批量插入數(shù)據(jù),都有可能出現(xiàn)以下錯誤
錯誤一
No value for key [xxx] bound to thread
解決:
1、由于手動控制事務釋放資源時,需要開啟一個統(tǒng)一管理的全局事務
2、此錯誤是聲明式事務和手動控制事務相沖突,如果在代碼中有涉及到手動控制注入數(shù)據(jù)源事務管理Bean對象 DataSourceTransactionManager,如果出現(xiàn)上述問題,請開啟聲明事務:
@Transactional(rollbackFor = {Exception.class})
3、如果方法內部調用的保存或刪除方法也走Spring事務管理、或者內部方法開啟的有新的事務,那么內部方法也要開啟聲明式事務:@Transactional(rollbackFor = {Exception.class})
sysUserAddressList.forEach(obj -> { synchronized (obj) { save(obj); } });
錯誤二
ResultSet is from UPDATE. No Data
解決:
1、首先檢查SQL語法是否正確,保證SQL語句沒問題
2、有可能是同一時間進入了多條SQL語句,再釋放結果集對象的時候沖突,需要考慮線程安全問題,在需要同步的代碼對象加上synchronized 同步鎖關鍵字,例如:
sysUserAddressList.forEach(obj -> { synchronized (obj) { save(obj); } });
3、若是在JDBC工具類中將Connection,PreparedStatement或ResultSet定義成全局靜態(tài)變量,則要考慮線程安全問題
錯誤三
Transaction is already completed - do not call commit or rollback more than once per transaction
解決:
1、手動控制事務,提示很明顯,已完成的事務,不要多次提交或回滾
2、在提交或回滾事務之前,先判斷該事務狀態(tài)是否完成即可:
transactionStatuses.forEach(status -> { if (!status.isCompleted()) { dataSourceTransactionManager.commit(status); } });
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
SpringCloud實戰(zhàn)之Feign聲明式服務調用
這篇文章主要介紹了SpringCloud實戰(zhàn)之Feign聲明式服務調用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05解決Java壓縮zip異常java.util.zip.ZipException:duplicate entry
這篇文章主要介紹了解決Java壓縮zip異常java.util.zip.ZipException:duplicate entry:問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12解決Intellij IDEA 使用Spring-boot-devTools無效的問題
下面小編就為大家?guī)硪黄鉀QIntellij IDEA 使用Spring-boot-devTools無效的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-07-07淺談Java中@Autowired和@Inject注解的區(qū)別和使用場景
本文主要介紹了淺談Java中@Autowired和@Inject注解的區(qū)別和使用場景,@Autowired注解在依賴查找方式和注入方式上更加靈活,適用于Spring框架中的依賴注入,而@Inject注解在依賴查找方式上更加嚴格,適用于Java的依賴注入標準,感興趣的可以了解一下2023-11-11詳解mybatis #{}和${}的區(qū)別、傳參、基本語法
這篇文章主要介紹了mybatis #{}和${}的區(qū)別、傳參、基本語法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07