1. 程式人生 > >identifier of an instance of .. altered to null ---- hibernate exception

identifier of an instance of .. altered to null ---- hibernate exception

identifier of an instance of .. altered to null

是做Hibernate,對一條資料進行復制(新增資料)時遇到的問題

原因:

在SSH框架中,我們常常把事務放在業務邏輯層(Manager),所有業務邏輯完成後才能commit事務,這時候,如果我們從資料庫load/get一個物件出來,雖然對它寫update方法,但是在提交事務時候,hibernate仍有要把當前物件和session中物件做比較,一旦修改了該物件某個屬性,hibernate會自動執行更新操作的。

其實就是我將原來的物件Id由原來的資料【xxxx】改變為null,所以hibernate在儲存資料的時候才會報錯,hibernate在這裡監聽到的是屬性值改變,是更新而不是儲存

我原本是想再原來資料的基礎上覆制一條和他一樣的來,沒想到卻做成了修改。

解決方法:

不能直接更新已經查到的資料,要new一個物件例項,進行屬性複製(BeanUtils.copyProperties(source, dist))

擴充套件:

如果要複製的例項中,關聯到另外一個或幾個例項,此時你就要分析是哪個關聯到哪個,如果你複製的例項是被關聯,那可以不用考慮關聯,直接將該關聯屬性置空。

反之,如果不是被關聯,就要考慮關聯的問題了