2010-10-04 40 views
1

如果我使用ex.merge(obj),現在如果在對象obj中,我將主鍵設置爲數據庫中不存在的值,它會創建一個新記錄還是會拋出異常?合併僅用於創建或更新?

例如

if obj with pk val = 19 doesnot exist in database,and i set 
obj.setPk(20); 
obj.setName("nm"); 

em.merge(obj) // will this throw an exception or create a new record?`enter code here` 

回答

3

這將創建一個新的紀錄:

  • 如果實體已經在持久化上下文(會話),不採取任何行動,除了級聯

  • 如果實體被分離,則返回一個副本(對象'),該副本被附加(管理)

  • 如果實體是短暫的(新實例),它被保存和持久性(和管理)複製返回

+0

+1很好的解釋 – 2010-10-04 09:01:57

+0

我從我寫一個通用的註釋複製它我的道,因爲它不那麼簡單。我記得在實現所發生的事情之前,我不得不閱讀規範幾次:) – Bozho 2010-10-04 09:02:57