23

私がこのクラスを持っているとしましょう:

@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更新したばかりのメソッドではなく、メソッドのデータベースから値を取得するにはどうすればよいですか?

4

1 に答える 1