2012-01-04 16 views
1

誰かが次のことがうまくいかない理由を説明できますか?PrePersistメソッドがJPAで変更された値を保存できない

私は複雑なPOJOを含むいくつかの一時的なフィールドを持つドメインオブジェクトを持っています。 comainオブジェクトが保存されると、これらのオブジェクトをXML(Xstreamを使用)にシリアル化し、データベースのPersistentMapに格納します。

私は@ PrePersist/@ PreUpdateメソッドを自分のドメインオブジェクトに作成し、それらのメソッドでは値をシリアル化し、それらをドメインオブジェクトの永続マップに配置します。 persistが呼び出されると、値がシリアライズされ、マップが更新されますが、保存される実際の値は更新された値ではなく元の値になります。

PrePersist/PreUpdateメソッドで変更が行われているため、基本的な永続性プロバイダ(私の場合はHibernate 3)がPrePersist/PreUpdateメソッドを呼び出す前にドメイン内の変更されたフィールドを決定します。実際の保存が行われ、元の値は決して更新されません。

誰も私にこの仕事をする方法の手がかりを与えることができますか? PrePersist/PreUpdateフック以外の他のメカニズムがありますか?

いずれのポインタも大歓迎です。

おかげ

答えて

2

のみ過渡値は、Hibernateは、オブジェクトが変更されており、結果として​​を呼び出さないだろうと思いません変更した場合。

+0

ありがとうございます@マイケル、あなたの答えは私の一日を保存しました! :-) – kiwifrog

1

これを実現させる唯一の方法は、実際にイベントの状態を変更することでした。

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