我需要获取@PostUpdate中保存(@PreUpdate)之前的对象值( preUpdateOrder )。
例如,@ PreUpdate preUpdateOrder 的值是5,当我访问 preUpdateOrder 时,我需要获取值5。 > 在@PostUpdate中,其中 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{
}
答案 0 :(得分:0)
JPA实体侦听器非常有限。无法获得旧状态。
您应该使用休眠拦截器功能。定义拦截器很容易:
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中设置休眠属性:
spring.jpa.properties.hibernate.ejb.interceptor=yourpackage.LoggingInterceptor
请在官方文档中找到更多信息:https://docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html#events