有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java获取@postpdate中的@PreUpdate值

我需要在@PostUpdate中获取保存(@PreUpdate)之前的对象值(preUpdateOrder

例如,@PreUpdatepreUpdateOrder的值为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{
}

共 (1) 个答案

  1. # 1 楼答案

    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
        }
    }
    

    然后必须在应用程序中设置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