Hibernate - Отрешитная целей аудита
-
26-09-2019 - |
Вопрос
Я уже использую Hibernate, каждующуюся аудиторские объекты, которые обновляются пользователем через UI; Тем не менее, у меня также есть асинхронные рабочие места, работающие на заднем плане и хотели бы аудить тех, которые также используют, используя остреемую. Теперь, для пользовательского интерфейса, я отслеживая, какой httprequest сделал изменение, которое дает мне дату, пользователь, сеанс и т. Д. Для фоновых заданий, я хотел бы отслеживать дату выполнения задания, а также точную работу, которая модифицировала его (Рабочий класс).
Можно ли настроить 2 аудиторских сущностей, 1 для UI и 1 для изменений системы?
Уолтер
Решение
Я еще не проверил это, но я просто делаю следующее:
@RevisionListener(SystemRevisionListener.class)
@Entity
public class SystemRevision extends AbstractRevision
{
@Column(nullable = false, updatable = false)
protected QuartzTriggerHandle job;
@Column(nullable = false, updatable = false)
protected Class jobClass;
...
}
@RevisionListener(WebRevisionListener.class)
@Entity
public class WebRevision extends AbstractRevision
{
@ManyToOne(optional = false)
@JoinColumn(nullable = false, updatable = false)
protected HttpRequest httpRequest;
...
}
Затем, в каждом слушателе, я делаю все, что мне нужно сделать, чтобы установить эти свойства. Теперь я должен быть в состоянии отслеживать, как сущность, как модифицировано, если пользователь сделал изменение (и на какой запрос он связан), или если система изменила сущность, какая работа отвечает за изменения. Я буду хранить больше свойств в SystemRevision, чем это, скорее всего, аргументы и имя метода.