У нас есть приложение, которое отслеживает все изменения сущностей с двухвременными данными. Каждый объект имеет:Bi временные данные аудита с JPA Envers
@Embeddable
public class AuditInfo {
private Date effectiveFrom;
private Date effectiveTo;
private Date asOf;
private Boolean isCurrent;
}
Однако на обновление объекта, мы хотели бы, чтобы вставить новую запись и обновить старую с isCurrent = ложь и обновить дату effectiveTo с текущей даты и времени.
Могу ли я достичь этого с помощью Spring Jpa-Envers?
Я пробовал подключать перехватчики Hibernate и позже понял, что могу модифицировать поля сущности внутри перехватчика и не могу ничего сделать.
Я могу легко добавить сервисный уровень, который достигнет этого, но он звучит так, как будто он не принадлежит к сервису, поскольку он является проблемой с перекрестным отключением.
Другое, с которым мы ориентируемся, - это пользовательский репозиторий и переопределение метода save().
Поблагодарите ваши мысли.
Спасибо, что ответили. –
Когда мы создаем сущности, эффективная дата - это что-то в будущем (+100 лет). Когда сущность модифицируется, мы хотим обновить старую версию с помощью effectiveTo = sysdate-1 и новой версии с эффективнымFrom = sysdate. Это упрощает запрос для объекта на определенную дату, для которой он был эффективным. Это также может быть достигнуто только с эффективностью на стороне, но означает, что запрос намного сложнее. Можно ли обновить предыдущий revsion? –
Нет, ревизии неизменяемы. Но мне кажется, что в вашем случае разные версии объектов имеют разные идентификаторы, поэтому вы должны просто моделировать его как отдельные сущности и запрашивать с помощью JPA. В этом случае Envers не даст вам многого. – adamw