hibernate學習筆記1——save、persist;load、get;merge、update比較

1.save()和persist()

hibernate之所以提供與save()功能幾乎完全類似的persist()方法,一方面是爲了照顧JPA的用法習慣;另一方面是save()和persist()方法還有一個區別:使用save()方法保存持久化對象時,該方法返回該持久對象的標識屬性值(即對應記錄的主鍵值);但使用persist()方法來保存持久化對象時,該方法沒有任何返回值。因爲save()方法需要立即返回持久化對象的標識屬性值,所以程序執行save()方法會立即將持久化對象對應的數據插入數據庫;而persist()則保證當它在一個事務外部調用時,並不立即轉化成insert語句。而這個功能是很有用的,尤其是需要封裝一個長會話流程的時候,persist()方法就顯得尤爲重要。

2.load()和get()

load()方法和get()方法的主要區別在於是否延遲加載,使用load()方法將具有延遲加載功能,load()方法不會立即訪問數據庫,當試圖加載的記錄不存在時,load()方法可能返回一個未初始化的代理對象;而get()方法總是立即訪問數據庫,當試圖加載的記錄不存在時,get()方法將直接返回null。

3.merge()與update()

merge()與update()方法的最大區別是:merge()方法不會持久化給定的對象,該方法的作用只是將當前對象的狀態信息保存到數據庫,並不將該對象轉換成持久化狀態,而是返回一個持久化狀態的副本。例如:當程序執行session.update(a)代碼後,a對象將會變成持久化狀態;而執行session.merge(a)代碼後,a對象依然不是持久化狀態,a對象依然不會被關聯到session上,merge()方法會返回a對象的副本——該副本處於持久化狀態。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章