を休止データベースに保存(更新)されます。私は、更新前metdhodでこれを行う:取得オブジェクトフィールド前の値の私は、このクラスを持っていると仮定しましょうJPA
@PreUpdate
public void preUpdate(Object entity) {
...some logic here...unable to get the old object value in here
}
だから私は名前と姓を持つMyClass
オブジェクトインスタンス持つと仮定すると:私は聞いているので大丈夫です
MyClass mycls = new MyClass();
mycls.setName("Bob");
mycls.setSurname("Dylan");
mycls.save();
これは、リスナーによってピックアップされなかったが更新のみ。私はそうのように、このインスタンスを更新した場合 は今:
MyClass cls = MyClass.findById(someLongId)
cls.setSurname("Marley");
cls.update();
だから、これはmylistenerでpreUpdate
方法をトリガーし、私がしようとすると:私はすでに新しく更新されたインスタンスを取得デバッグする場合
MyClass.findById(someLongId);
しかし、更新はまだ起こっていません。なぜなら、私がカラムの姓でデータベースをチェックインすると、それはまだDylan
です。
preUpdate
メソッドではデータベースからどのように値を取得できますか?今更新したものではありません。
こんにちはルネ、私は私のPOJOクラスで@PostLoadを持っていない、それはどちらかのパッケージがスコープ作るか、またはパッケージがアクセサをスコープと同じパッケージに
MyClass
とMyListener
を入れて使用することをお勧めします。私はエンティティリスナの中に持っています –いいえ、エンティティリスナにコードを移動することができます。つまり、EntityListenerがロード時にオブジェクトのコピーを作成し、フィールドを設定するということです。それとも私が見逃していることはありますか? –
このコードをリスナークラスに移動すると、リスナーのインスタンスが変更されます。ですから、ポストロードのリスナーインスタンスに値を設定すると、そのインスタンスはpreupdateでnullになります –