我认为一种简单的方法是将先前的值保存在JPA将不会持久的瞬态变量中。因此,只需引入一个变量previousSurname并保存实际值,然后再在设置器中将其覆盖即可。
如果要保存多个属性,如果您的班级
MyClass是
Serializable.
如果是这样,请添加后加载侦听器
public class MyClass implements Serializable { @Transient private transient MyClass savedState; @PostLoad private void saveState(){ this.savedState = SerializationUtils.clone(this); // from apache commons-lang }}但是请注意,这savedState
是一个独立的实例。
然后,您可以在中访问上一个状态
EntityListener。
您也可以将
PostLoad侦听器移至
EntityListener该类。但是随后您需要访问该
savedState字段。我建议,使其无论是封装作用域或使用包范围的访问,并把
MyClass与
MyListener在同一个包,
public class MyListener { @PostLoad private void saveState(MyClass myClass){ myClass.saveState(SerializationUtils.clone(myClass)); // from apache commons-lang }}public class MyClass implements Serializable { @Transient private transient MyClass savedState; void saveState(MyClass savedState){ this.savedState = savedState; }}


