hibernate中session的相關方法(save,persist get,load saveOrUpdate delete evict)
阿新 • • 發佈:2018-11-11
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()
- 若需要更新一個持久化物件,不需要顯示的呼叫update方法,因為在呼叫Transaction的commit()方法時,會先執行session.flush()
- 更新一個遊離物件需要顯示 的呼叫update方法,可以把一個遊離物件變成持久化物件,無論要更新的遊離物件和資料表的記錄是否一致 都會發送update語句
設定select-before-update=”true” ,但通常不需要設定該屬性
- 若資料表中沒有對應的記錄,但還呼叫update方法,會丟擲異常
- 如果在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快取中刪除了