Hibernate Audit Issue - PullRequest
       21

Hibernate Audit Issue

0 голосов
/ 11 февраля 2019

Я использую Hibernate Audit для ведения истории аудита для следующего класса,

@Entity
@Audited
Class B{

}

@Entity
@Audited
Class C{

}

@Entity
@Audited
class A{
   B b;
   C c;
   /*all getter and setters will be given*/ 
}

Поэтому, когда бы я ни обновлял или удалял объект класса A, он автоматически добавляет проверенный аудитревизия для классов A, B и C. Так, чтобы получить подробную информацию о конкретной ревизии класса A. Я использую метод поиска AuditReader, подобный этому

getReader().find(A.class, id, revId);

Если аудиты присутствуют для всех трех объектов A, B и C. Он вернет соответствующие данные в этой ревизии аудита.Но если класс B еще не рассматривается как объект аудита, т.е. я создал объект аудита классов A и C с самого начала, добавив аннотацию @ Audited , а класс B - это обычный объект без @ Audited annotation, всякий раз, когда я обновляю объект класса A, он автоматически записывает ревизии аудита для классов A и C, поскольку класс B не является объектом аудита, в нем не будет никакой таблицы B_Aud , и ни одно из изменений не будетрегистратор в таблице аудита.Теперь после сохранения некоторых данных, подобных этой, я сделаю Класс B объектом аудита, добавив аннотацию @ Audited .Теперь, если мы сохраним изменения объекта класса A, он будет записывать изменения объектов A, B и C в таблицу аудита.Но если я попытаюсь получить сущность класса A в определенной ревизии, когда класс B не был создан в качестве проверяемой сущности, он выдаст исключение, говорящее

org.hibernate.ObjectNotFoundException: No row with the given identifier exists

Теперь я хочу получить объект класса A в указанной ревизии, и еслиАудит объекта B отсутствует, и при получении объекта класса A присутствуют только данные аудита A и C, тогда я хочу установить последние данные версии аудита для B, присутствующие в таблице B_Aud вместо нуля. Есть ли способдостичь этого?

...