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設(shè)置為自增之后,調(diào)用接口是傳入的JSON數(shù)據(jù)不帶id或者id為null的時候,由于MyBatis的自動映射機(jī)制,會嘗試把查詢結(jié)果中的每一列,映射到對應(yīng)的Java對象屬性中。
所以在插入完成后,MyBatis還會試圖把生成的id,映射設(shè)置到Users對象的id屬性中。
但因為你沒有傳id參數(shù),導(dǎo)致類型不匹配,從而報錯。
解決方法
調(diào)用接口時id設(shè)置為0,或者在接口上設(shè)置user.setId(0);
Mybatis Plus插入數(shù)據(jù)事務(wù)控制常見異常、報錯問題
報錯:
No value for key,Transaction is already completed,ResultSet is from UP
場景:
在手動控制事務(wù)中,使用全局事務(wù)管理器對象,正常插入數(shù)據(jù)、或批量、或使用線程池開啟多線程批量插入數(shù)據(jù),都有可能出現(xiàn)以下錯誤
錯誤一
No value for key [xxx] bound to thread
解決:
1、由于手動控制事務(wù)釋放資源時,需要開啟一個統(tǒng)一管理的全局事務(wù)
2、此錯誤是聲明式事務(wù)和手動控制事務(wù)相沖突,如果在代碼中有涉及到手動控制注入數(shù)據(jù)源事務(wù)管理Bean對象 DataSourceTransactionManager,如果出現(xiàn)上述問題,請開啟聲明事務(wù):
@Transactional(rollbackFor = {Exception.class})3、如果方法內(nèi)部調(diào)用的保存或刪除方法也走Spring事務(wù)管理、或者內(nèi)部方法開啟的有新的事務(wù),那么內(nèi)部方法也要開啟聲明式事務(wù):@Transactional(rollbackFor = {Exception.class})
sysUserAddressList.forEach(obj -> {
synchronized (obj) {
save(obj);
}
});錯誤二
ResultSet is from UPDATE. No Data
解決:
1、首先檢查SQL語法是否正確,保證SQL語句沒問題
2、有可能是同一時間進(jìn)入了多條SQL語句,再釋放結(jié)果集對象的時候沖突,需要考慮線程安全問題,在需要同步的代碼對象加上synchronized 同步鎖關(guān)鍵字,例如:
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、手動控制事務(wù),提示很明顯,已完成的事務(wù),不要多次提交或回滾
2、在提交或回滾事務(wù)之前,先判斷該事務(wù)狀態(tài)是否完成即可:
transactionStatuses.forEach(status -> {
if (!status.isCompleted()) {
dataSourceTransactionManager.commit(status);
}
});總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
mybatis主鍵自增,關(guān)聯(lián)查詢,動態(tài)sql方式
這篇文章主要介紹了mybatis主鍵自增,關(guān)聯(lián)查詢,動態(tài)sql方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-06-06
intellij idea旗艦版解決學(xué)生無法注冊問題詳解
這篇文章主要介紹了intellij idea旗艦版解決學(xué)生無法注冊問題詳解,文中通過圖文示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
Java中Bean轉(zhuǎn)Map問題歸納總結(jié)
Java Bean轉(zhuǎn)Map的坑很多,最常見的就是類型丟失和屬性名解析錯誤的問題,下面這篇文章主要給大家介紹了關(guān)于Java中Bean轉(zhuǎn)Map問題歸納總結(jié)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06
Java 實(shí)戰(zhàn)項目之精品養(yǎng)老院管理系統(tǒng)的實(shí)現(xiàn)流程
讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+Springboot+Maven+mybatis+Vue+Mysql實(shí)現(xiàn)一個精品養(yǎng)老院管理系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平2021-11-11
Java使用跳轉(zhuǎn)結(jié)構(gòu)實(shí)現(xiàn)隊列和棧流程詳解
這篇文章主要介紹了Java使用跳轉(zhuǎn)結(jié)構(gòu)實(shí)現(xiàn)隊列和棧流程,連續(xù)結(jié)構(gòu)和跳轉(zhuǎn)結(jié)構(gòu)是數(shù)據(jù)結(jié)構(gòu)中常見的兩種基本數(shù)據(jù)結(jié)構(gòu),而我們本次的主角棧和隊列都 既可以使用使用跳轉(zhuǎn)結(jié)構(gòu)實(shí)現(xiàn)也可以使用連續(xù)結(jié)構(gòu)實(shí)現(xiàn)2023-04-04
SpringBoot讀取yml文件中配置數(shù)組的2種方法
這篇文章主要介紹了SpringBoot讀取yml文件中配置數(shù)組的2種方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12

