2012-01-04 107 views
1

有人可以解釋爲什麼以下方法無效嗎?PrePersist方法無法保存JPA中的修改值

我有一個域對象有幾個包含複雜POJO的瞬態字段。當comain對象被保存時,我想將這些對象序列化爲XML(使用Xstream),並將它們存儲到我的數據庫的PersistentMap中。

因此,我在我的域對象上創建@ PrePersist/@ PreUpdate方法,並在這些方法中序列化值並將它們放入域對象中的持久性映射中。當persist被調用時,我可以看到值被序列化,地圖得到更新,但保存的實際值是原始值,而不是更新的值。

我的假設是,由於更改發生在PrePersist/PreUpdate方法中,因此在調用PrePersist/PreUpdate方法之前,基礎持久性提供程序(在本例中爲Hibernate 3)將確定域中已更改的字段,實際保存完成後,原始值永遠不會更新。

任何人都可以給我一個關於如何使這項工作的線索?除了PrePersist/PreUpdate掛鉤之外,還有其他一些機制可以使用嗎?

任何指針將不勝感激。

感謝

回答

2

如果只是短暫改變值Hibernate會不會認爲對象發生了變化,因此不會叫​​。

+0

謝謝@Michael,你的回答救了我的一天! :-) – kiwifrog 2013-07-25 11:20:25

1

我能夠得到這個工作的唯一方法是實際上改變事件的狀態。

String[] names = event.getPersister().getPropertyNames(); 
for (int i=0; i < names.length; i++) { 
    if ("myProperty".equals(names[i])) { 
     event.getState()[i] = getMyProperty(); 
    } 
}