Как получить доступ к oldObject и newObject с помощью прослушивателей Entity и методов обратного вызова - PullRequest
2 голосов
/ 24 мая 2011

Я регистрирую все изменения, внесенные в мои объекты в БД.

@PostPersist
public void logPostPersist(Object object) {
    PAudit p = new PAudit();
    p.setChangeType("INSERT");
    p.setObjectState(object.toString());
    p.setUserName(SecurityContextHolder.getContext().getAuthentication().getName());
    try {
        p.persist();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

@PostUpdate
public void logUpdate(Object object) {
    PAudit p = new PAudit();
    p.setChangeType("UPDATE");
    p.setObjectState(object.toString());
    p.setUserName(SecurityContextHolder.getContext().getAuthentication().getName());
    p.persist();
}

это даст мне текущее состояние объекта после его изменения. Я также хочу добавить предыдущее состояние объекта (до его изменения) вместе с текущим состоянием.

Как я могу получить оба состояния объекта (до изменения и после изменения) одновременно?

Спасибо.

1 Ответ

2 голосов
/ 24 мая 2011

Вы можете сделать это, создав интерфейс, который должны реализовывать классы вашего домена, обеспечивающие предыдущее состояние:

public interface PreviousStateProvider {
  public T getPreviousState();

  public void setPreviousState(T state);
}

Класс домена должен иметь частное свойство для хранения состояния в том месте, в котором он был загружен.

Затем вы можете создать прослушиватель Hibernate PostLoad, который устанавливает загруженное состояние для объекта домена в точке, в которой он загружен. Затем, когда вы придете обновить объект домена, вы можете получить доступ к предыдущему (загруженному) состоянию, используя:

getPreviousState()

способ.

Надеюсь, это понятно.

...