私がこのクラスを持っているとしましょう:
@EntityListeners({MyListener.class})
class MyClass {
String name;
String surname;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSurname() {
return name;
}
public void setSurname(String name) {
this.name = name;
}
public void save() {
JPA.em().persist(this);
return this;
}
public void update() {
JPA.em().merge(this);
}
public static MyClass findById(Long id) {
return JPA.em().find(MyClass.class, id);
}
}
今私のMyListenerクラスでは、以前の値MyClassのインスタンスと、データベースに保存(更新)されようとしている新しい値を理解しようとしています。私は preupdate メソッドでこれを行います:
@PreUpdate
public void preUpdate(Object entity) {
...some logic here...unable to get the old object value in here
}
したがってMyClass、 name と surname を持つオブジェクト インスタンスがあると仮定します。
MyClass mycls = new MyClass();
mycls.setName("Bob");
mycls.setSurname("Dylan");
mycls.save();
これは、更新のみをリッスンしているため、リスナーによって検出されませんでした。このインスタンスを次のように更新する場合:
MyClass cls = MyClass.findById(someLongId)
cls.setSurname("Marley");
cls.update();
したがって、これpreUpdateは mylistener のメソッドをトリガーし、次のことを試みると:
MyClass.findById(someLongId);
デバッグすると、新しく更新されたインスタンスが既に取得されていますが、姓の列でデータベースをチェックインすると、まだ更新されていないため、更新はまだ行われていませんDylan。
preUpdate更新したばかりのメソッドではなく、メソッドのデータベースから値を取得するにはどうすればよいですか?