私がこのクラスを持っているとしましょう:
@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
更新したばかりのメソッドではなく、メソッドのデータベースから値を取得するにはどうすればよいですか?