我正在嘗試在數據庫表中上傳 Excel 工作表。我正在將 excel 行轉換為休眠實體并嘗試將其保存在數據庫中。為了實現這一點,我面臨著問題。很少有數據庫約束,如唯一鍵或復合鍵等,但用戶可以上傳任何工作表。因此,如果特定行未能插入,那么我的要求是應繼續其他行。并且交易應該被保存。`Session session=localSessionFactoryBean.getObject().openSession(); Transaction tx = session.beginTransaction();fot(i=0;i<list.size();i++){Long Id = (Long) session.save(list.get(i));if (i % 50 == 0) { session.flush(); session.clear(); }}tx.commit();session.close();` 此處如果單行失敗,則所有行都失敗。我收到 org.hibernate.AssertionFailure: null id (在異常發生后不刷新會話) 異常。請幫忙批量上傳。
2 回答

富國滬深
TA貢獻1790條經驗 獲得超9個贊
Hibernate 不允許在發生異常后刷新會話(您應該don't flush the Session after an exception occurs
在堆棧跟蹤中看到消息),因此繼續的方法可以是:
將您list
分成 50 個元素的塊,并嘗試將每個塊保存在單個事務中:
如果一切順利,只需提交并繼續下一個塊。
如果發生錯誤,回滾事務并重新啟動塊,但將失敗塊的每個元素保存在專用事務中
添加回答
舉報
0/150
提交
取消