Hibernate的save方法原始碼初探
阿新 • • 發佈:2019-02-09
請看進行了如下總結:
一、在session的內部快取中尋找儲存物件,如果找到了,則認為此資料已經儲存(曾經執行過insert操作),實體物件已經處於 persistent狀態,直接返回。此時即使資料相比之前的狀態發生了變化,也將在事務提交時由髒資料檢查來判定是否需要執行update操作。
二、如果實體物件實現了lifecycle介面,那麼將執行待儲存物件的onSave()方法。
三、如果實體物件實現了Validatable介面,那麼將會執行相應的validate()方法。
四、如果存在攔截器物件,那麼將會執行Interceptor.onSave()方法。
五、構造insert SQL語句完成資料儲存。
六、資料儲存成功後,設定實體物件的id為插入記錄的id。
七、將儲存後的實體物件納入Hibernate的內部快取(一級快取)。注意Hibernate不會把儲存後的實體物件納入二級快取,因為剛剛儲存過的實體物件很可能在之後被修改,快取的頻繁更新以及帶來的同步問題代價,超出了快取該物件所帶來的收益。
八、如果關聯關係對映配置了cascade="save-update"屬性,save操作對關聯物件級聯操作。
上圖:
序列圖: