【Hibernate】Hibernate中save、persist和saveOrUpdate有何不同?
阿新 • • 發佈:2019-02-06
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的區別
- 返回型別不同:save返回Serializable物件,而persist返回void
- ID賦值時機不同:二者同樣用於將transient例項持久化,但persist不保證ID值立即賦給持久化例項,可能會在flush的時候給ID賦值。
- transaction外的行為不同:如果在transaction之外呼叫,persist保證
- 使用場景:由於上述第三點區別,persist方法適用於被擴充套件的Session上下文的長期執行的會話中(useful in long-running conversations with an extended Session context);而save則不適用。