Получить значение @PreUpdate в @PostUpdate - PullRequest
0 голосов
/ 08 июля 2019

Мне нужно получить значение объекта ( preUpdateOrder ), которое было до сохранения (@PreUpdate), в @ PostUpdate.

Например, @PreUpdate значение preUpdateOrder было 5, мне нужно получить значение 5 при обращении к preUpdateOrder в @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 голосов
/ 08 июля 2019

Слушатели сущности 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 в 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...