Hibernate Envers Audit Query - получить только самую последнюю версию для всех сущностей

Я хотел бы получить все последние версии всех сущностей (то есть все в базе данных), которые были недавно изменены.
После запроса извлекаем версии конкретной сущности "MyEntity"

queryObject = auditReader.createQuery (). forRevisionsOfEntity (MyEntity.class, false, true) .addOrder (AuditEntity.revisionNumber (). desc ())

Но мне нужен механизм для получения записей для всех сущностей независимо от конкретного типа сущности.


person Satyam    schedule 13.11.2019    source источник


Ответы (1)


Загляните в org.hibernate.envers.track_entities_changed_in_revision.

Этот параметр вызывает создание таблицы соединения для объекта-ревизии, где для каждого номера ревизии будет отслеживаться набор имен сущностей на основе строк. Обладая этой информацией, вы сможете создавать необходимые запросы с помощью AuditReader#createQuery() API для повторения всех изменений.

В псевдокоде это будет примерно так:

List<Number> revisions = // create AuditQuery to get all revision numbers
for ( Number revision : revisions ) {
  DefaultTrackingModifiedEntitiesRevisionEntity revisionEntity = // create query to get revision entity
  for ( String entityName : revisionEntity.getModifiedEntityNames() ) {
    // create query based on entityName + revisionNumber
  }
}
person Naros    schedule 13.11.2019
comment
Как получить все номера ревизий. Должен ли я явно запрашивать таблицу изменений оборотов для того же или есть какой-либо неявный метод, предоставляемый фреймворком enver? - person Satyam; 15.11.2019
comment
@Satyam, это может помочь: docs.jboss.org/hibernate/orm/current/userguide/html_single/ - person M.Ricciuti; 12.03.2021