@transactional
public void task() {
//步驟(1)插入操作
try {
save();
}catch (Exception e){
log();
}
//步驟(2)查詢操作
select();
}
上述代碼是我遇到的出現(xiàn)如題所示的拋錯場景壳鹤。
前提:在同個事務中,
1饰迹,步驟(1)插入操作拋錯了芳誓,但由于某些需要余舶,加了try catch,錯誤沒有往外拋锹淌;
2匿值,這時執(zhí)行了步驟(2)的查詢操作(這里的查詢跟步驟(1)save的實體無關);
3赂摆,查詢觸發(fā)了autoFlush挟憔,先前保存失敗的記錄會再次保存,導致拋如題所述異常烟号。
只要排查出步驟(1)中拋錯的原因(字段長度超出了數(shù)據(jù)庫設置的長度绊谭、非空字段但是空了、唯一索引沖突了......一切皆有可能)并解決汪拥,也就解決了如題所示的異常达传。