Получение всех изменений, сделанных пользователем в спящем режиме

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

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() : "[email protected]";
        auditEnversInfo.setUserId(username);
    }

}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
735
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Метод AuditEntity#revisionProperty — это то, что вам нужно:

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

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

Идеально! Спасибо :)

Kshitij Bajracharya 10.04.2019 08:04

Другие вопросы по теме