Я использую 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 вместо нуля. Есть ли способдостичь этого?