自己總結的,從部落格轉來,希望有幫助
有些東西不搞懂心理始終沒底,特意翻出來總結下:
Hibernate對象有三種狀态:
瞬時狀态(Transient):new出來的對象,或者從前端傳來的對象。反正不是從資料庫來的對象
持久狀态(Persistent):已資料庫互動過資料的對象:get、load,save、update。。。
脫管狀态(Detached):本來是Persistent的資料,但session關閉或者clear了,其實跟Transient效果基本一樣
網上抄個圖:
注意的地方:
1.如果對象A關聯對象B,而B又是Transient裝态,有可能直接save、update (A)會報錯,要麼先save、update(B)對象一下,要麼将B的級聯設定為@ManyToOne(cascade=CascadeType.MERGE)
2如果是Persistent狀态對象,無需update自動會保持資料同步
級聯設定:
CascadeType.PERSIST
CascadeType.MERGE
CascadeType.REMOVE
CascadeType.ALL
CascadeType.REFRESH
Class A{
Class B; 我的了解是,相當于是定義B類在A類發生什麼變化的時候做出級聯操作(新增、跟新或者删除)
}
CascadeType.PERSIST隻有A類新增時,會級聯B對象新增。若B對象在資料庫存(跟新)在則抛異常(讓B變為持久态)
CascadeType.MERGE指A類新增或者變化,會級聯B對象(新增或者變化)
CascadeType.REMOVE隻有A類删除時,會級聯删除B類;
CascadeType.ALL包含所有;