我需要获取@PostUpdate中保存(@PreUpdate)之前的对象值(preUpdateOrder)。
例如,@ PreUpdate的preUpdateOrder值为5,当我在@PostUpdate中访问preUpdateOrder时需要获取值5,其中postUpdateOrder为6。
这是我的代码,
public class AuditListener {
private Order preUpdateOrder = new Order();
private Order postUpdateOrder = new Order();
@PreUpdate
private void before(Object object) {
if (object instanceof Order) {
preUpdateOrder = ((Order) object);
}
}
@PostUpdate
private void after(Object object) {
if (object instanceof Order) {
postUpdateOrder = ((Order) object);
if(preUpdateOrder.getId().equals(postUpdateOrder.getId())){
System.out.println("true");
}
}
}
}
@EntityListeners(AuditListener.class)
@Entity
public class Order{
}
最佳答案
JPA实体侦听器非常有限。没有办法获得旧状态。
您应该使用Hibernates拦截器功能。定义拦截器很容易:
public static class LoggingInterceptor extends EmptyInterceptor {
@Override
public boolean onFlushDirty(
Object entity,
Serializable id,
Object[] currentState,
Object[] previousState,
String[] propertyNames,
Type[] types) {
// use old and new state
}
}
然后,您必须在application.properties中设置hibernate属性:
spring.jpa.properties.hibernate.ejb.interceptor=yourpackage.LoggingInterceptor
请在官方文档中找到更多信息:https://docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html#events