org.hibernate.AssertionFailure: null id in xxx entry (don't flush the Session after an exception ...

    @transactional
    public void task() {
        //步驟(1)插入操作
        try {
            save();
        }catch (Exception e){
            log();
        }
        //步驟(2)查詢操作
        select();
    }

上述代碼是我遇到的出現如題所示的拋錯場景。
前提:在同個事務中,
1,步驟(1)插入操作拋錯了,但由于某些需要,加了try catch,錯誤沒有往外拋;
2,這時執行了步驟(2)的查詢操作(這里的查詢跟步驟(1)save的實體無關);
3,查詢觸發了autoFlush,先前保存失敗的記錄會再次保存,導致拋如題所述異常。
只要排查出步驟(1)中拋錯的原因(字段長度超出了數據庫設置的長度、非空字段但是空了、唯一索引沖突了......一切皆有可能)并解決,也就解決了如題所示的異常。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容