У меня проблема с 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
, который фактически содержит «информацию», но я не могу получить к нему доступ через код (или я не знаю, как). Смотрите пример на картинке.
Итак, мой вопрос: 1 - Как я могу получить REVINFO
значения? 2 - Должен ли я действительно использовать entityManager, или это может быть достигнуто с помощью другого подхода?
Редактировать 2: Исправьте меня, если я ошибаюсь, но forRevisionsOfEntityWithChanges работает как Lazy Initialization? Я имею в виду, что если я попытаюсь получить, например, поле modifiedBy
, я действительно получу свои данные. Журнал отладчика запутал меня.