Получение всех изменений, внесенных пользователем в hibernate envers

#java #spring-boot #hibernate-envers #audit-logging

#java #весенняя загрузка #hibernate-envers #аудит-ведение журнала

Вопрос:

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

 AuditQuery aq = auditReader.createQuery().forRevisionsOfEntityWithChanges(DummyEntity.class, false);
  

Но есть ли способ получить все изменения, внесенные конкретным пользователем для всех объектов?

Я использую следующий объект для хранения информации о ревизии:

 @RevisionEntity(UserRevisionListener.class)
@Entity(name = "env_audit_envers_info")
public class AuditEnversInfo extends DefaultRevisionEntity {

    private static final long serialVersionUID = -7604731515258123883L;

    @Column(name = "user_id")
    private String userId;

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

}
  

И записи в эту модель будут добавляться при каждом изменении с использованием следующего прослушивателя:

 public class UserRevisionListener implements RevisionListener {

    @Override
    public void newRevision(Object revisionEntity) {
        AuditEnversInfo auditEnversInfo = (AuditEnversInfo) revisionEntity;
        Optional<Authentication> auth = Optional.ofNullable(SecurityContextHolder.getContext().getAuthentication());
        String username = auth.isPresent() ? auth.get().getName() : "anonymoususer@email.com";
        auditEnversInfo.setUserId(username);
    }

}
  

Ответ №1:

AuditEntity#revisionProperty Метод — это то, что вы ищете:

 List results = auditReader.createQuery()
  .forRevisionsOfEntityWithChanges( DummyEntity.class, false )
  .add( AuditEntity.revisionProperty( "userId" ).eq( userId ) )
  .getResultList();
  

#revisionProperty Методы были добавлены, чтобы позволить пользователям, которые расширяют или используют пользовательские экземпляры объектов ревизии в своей модели предметной области аудита, иметь возможность добавлять ограничения / прогнозы или иметь возможность сортировать результаты на основе полей в этой модели.

Комментарии:

1. Идеально! Спасибо 🙂