1. 程式人生 > >【Hibernate】Hibernate中save、persist和saveOrUpdate有何不同?

【Hibernate】Hibernate中save、persist和saveOrUpdate有何不同?

http://javarevisited.blogspot.tw/2012/09/difference-hibernate-save-vs-persist-and-saveOrUpdate.html

    所有這三個方法,也就是save()、saveOrUpdate()和persist()都是用於將物件儲存到資料庫中的方法,但其中有些細微的差別。例如,save()只能INSERT記錄,但是saveOrUpdate()可以進行記錄的INSERT和UPDATE。還有,save()的返回值是一個Serializable物件,而persist()方法返回值為void。

save與saveOrUpdate的區別

  •     save通過INSERT語句將物件儲存到資料庫,產生一個新的ID,將資料插入到資料庫,並返回一個Serializable物件。
  •     saveOrUpdate能根據物件是否已存在,而執行插入或更新

顯然saveOrUpdate更加靈活,但它需要額外判斷物件是否已存在。

save與persist的區別

  1. 返回型別不同:save返回Serializable物件,而persist返回void
  2. ID賦值時機不同:二者同樣用於將transient例項持久化,但persist不保證ID值立即賦給持久化例項,可能會在flush的時候給ID賦值。
  3. transaction外的行為不同:如果在transaction之外呼叫,persist保證
    會立即執行INSERT語句;而save則不保證(save返回一個identifier,如果必須執行INSERT來獲取該identifier,則就會立即執行INSERT,而不論是在transaction之內或之外)
  4. 使用場景:由於上述第三點區別,persist方法適用於被擴充套件的Session上下文的長期執行的會話中(useful in long-running conversations with an extended Session context);而save則不適用。