Hibernate Envers - выберите «все» изменения для идентификатора объекта - PullRequest
0 голосов
/ 11 апреля 2020

У меня проблема с Hibernate Envers. У меня есть классы, такие как:

@Entity
@Table(name = "REVINFO")
@RevisionEntity(MyRevisionEntityListener.class)
public class RevEntity {
    @Id
    @RevisionNumber
    @Column(name = "REV", nullable = false, updatable = false)
    private Integer id;

    @RevisionTimestamp
    @Column(name = "REVTSTMP", nullable = false, updatable = false)
    private Date timestamp;

    @Column(name = "MODIFIED_BY", length = 100)
    private String modifiedBy;

    @Column(name = "COMMENT", length = 100)
    private String comment;
public class MyRevisionEntityListener implements RevisionListener {
    @Override
    public void newRevision(Object revisionEntity) {
        RevEntity a = (RevEntity) revisionEntity;
        a.setComment("Some value");
    }
}

Как я могу выбрать каждое изменение для идентификатора сущности и их объекта "REVINFO"?

У меня есть что-то вроде этого:

   List resultList = AuditReaderFactory.get(entityManager)
                .createQuery()
                .forRevisionsOfEntityWithChanges(ClientType.class, true)
                .add(AuditEntity.id().eq(entityId))
                .getResultList();

И это почти хорошо работает. Я получил каждое "изменение", но REVINFO выглядит странно. Все поля являются нулевыми - и есть еще 1 объект $$_hibernate_interceptor, который фактически содержит «информацию», но я не могу получить к нему доступ через код (или я не знаю, как). Смотрите пример на картинке. enter image description here

Итак, мой вопрос: 1 - Как я могу получить REVINFO значения? 2 - Должен ли я действительно использовать entityManager, или это может быть достигнуто с помощью другого подхода?

Редактировать 2: Исправьте меня, если я ошибаюсь, но forRevisionsOfEntityWithChanges работает как Lazy Initialization? Я имею в виду, что если я попытаюсь получить, например, поле modifiedBy, я действительно получу свои данные. Журнал отладчика запутал меня.

...