天天看點

Hibernate三鐘狀态态以及級聯設定

自己總結的,從部落格轉來,希望有幫助

有些東西不搞懂心理始終沒底,特意翻出來總結下:

Hibernate對象有三種狀态:

瞬時狀态(Transient):new出來的對象,或者從前端傳來的對象。反正不是從資料庫來的對象

持久狀态(Persistent):已資料庫互動過資料的對象:get、load,save、update。。。

脫管狀态(Detached):本來是Persistent的資料,但session關閉或者clear了,其實跟Transient效果基本一樣

網上抄個圖:

Hibernate三鐘狀态态以及級聯設定

注意的地方:

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包含所有;