1. 程式人生 > >hibernate中session的相關方法(save,persist get,load saveOrUpdate delete evict)

hibernate中session的相關方法(save,persist get,load saveOrUpdate delete evict)

 

 

 

 

Save()與persist()方法區別

 

1.save()方法

使一個臨時物件變為持久化物件,為物件分配id,在flush快取時,會發送一條insert語句,在save()方法之前id設定是無效的,持久化物件的id是不能被修改的

2.persist()方法

在persist方法之前,若物件已經有id了,則不會執行insert,而丟擲異常

也可以執行insert操作

在save()方法之前設定id,無反應不報錯,之後設定會產生報錯

在pesist()方法之前設定id ,直接丟擲異常,也報錯

 

 

 

Session的get與load方法區別

1.Get方法:會立即載入物件,而執行load方法,若不使用該物件,則不會立即執行查詢操作,而返回一個代理物件

Get是立即檢索 Load使用的是延遲檢索

2.若資料表中無記錄,get返回null ,load在使用到物件(需要初始化了)的時候就報錯(僅使用session.load無所謂)

3. load可能會丟擲懶載入異常 在需要初始化代理物件之前已經關閉了session

 

Update()

  1. 若需要更新一個持久化物件,不需要顯示的呼叫update方法,因為在呼叫Transaction的commit()方法時,會先執行session.flush()
  2. 更新一個遊離物件需要顯示 的呼叫update方法,可以把一個遊離物件變成持久化物件,無論要更新的遊離物件和資料表的記錄是否一致 都會發送update語句

設定select-before-update=”true” ,但通常不需要設定該屬性

  1. 若資料表中沒有對應的記錄,但還呼叫update方法,會丟擲異常
  2. 如果在Session的快取中已經存在相同OID的持久化物件,會丟擲異常

saveOrUpdate()

判斷物件 遊離態還是臨時物件(OID為null)

Java物件的OID為null

注意:1.若oid不為null,但資料表中沒有和其對應的記錄,會丟擲一個異常

2.瞭解oid值等於id的unsaved-value 也被認為遊離物件

delete()

執行刪除操作,只要oid和資料表中一條記錄對應,就會準備執行delete操作。

若oid在資料表中沒有對應記錄,則丟擲異常'

evict()

從session快取中把指定的持久化物件移除

只有news2更新了,news1從session快取中刪除了