在@PostUpdate中获取@PreUpdate值

时间:2019-07-08 14:00:08

标签: java spring hibernate spring-boot jpa

我需要获取@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{
}

1 个答案:

答案 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