假设我有这个类:
@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);
当我调试时,我已经获得了新更新的实例,但更新尚未发生,因为当我在 surname 列中检入数据库时,它仍然是Dylan
.
如何在我的preUpdate
方法中从数据库中获取值,而不是我刚刚更新的那个?