原始代碼
public void save(User transientInstance) {
log.debug("saving User instance");
try {
getSession().save(transientInstance);
log.debug("save successful");
} catch (RuntimeException re) {
log.error("save failed", re);
throw re;
}
}
逐行功能解析
- 方法簽名:
public void save(User transientInstance) - 公開方法,接收一個處於瞬時狀態的 User 對象。
- 調試日誌:
log.debug("saving User instance") - 記錄開始保存操作的調試信息。
- 異常處理塊:
try { ... } catch (RuntimeException re) { ... } - 包裹核心保存邏輯,捕獲運行時異常。
- 執行保存:
getSession().save(transientInstance) - 獲取 Hibernate Session 並將對象持久化,此時會生成 INSERT 語句。
- 成功日誌:
log.debug("save successful") - 保存無異常時記錄成功信息。
- 異常捕獲:
catch (RuntimeException re) - 捕獲保存過程中拋出的運行時異常。
- 錯誤日誌:
log.error("save failed", re) - 記錄錯誤堆棧,便於排查。
- 重新拋出:
throw re; - 保持畂常傳播,讓上層調用者感知失敗。
關鍵點總結
- 該方法展示了典型的「嘗試-捕獲-記錄-重拋」異常處理模式。
getSession() 通常來自繼承的 HibernateDaoSupport 或注入的 SessionFactory。
- 拋出的異常常被 Spring 的
@Transactional 捕獲以觸發事務回滾。