Я использую Hibernate Envers для проверки моих объектов.
У меня есть один проверенный объект, Foo
, который имеет свойства List<Bar>
as. Однако я не хочу проверять сущности Bar
. Таким образом, я написал, что:
@Entity
@Audited
public class Foo {
@JoinTable(name = "T_FOO_BAR", joinColumns = @JoinColumn(name = "FOO_ID"), inverseJoinColumns = @JoinColumn(name = "BAR_ID"))
@ManyToMany(cascade = PERSIST)
@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
public List<Bar> getBars() {
return bars;
}
}
Теперь я хочу получить версию Foo
:
AuditReader reader = AuditReaderFactory.get(getEntityManager());
Foo revision = (Foo) reader.createQuery().forEntitiesAtRevision(Foo.class, 42).getSingleResult();
К сожалению, когда я хочу получить все данные (т.е. когда он ленивы загружает bars
), я получаю ошибку ORA-00942: table or view does not exist
, поскольку он пытался запросить:
select ... from T_FOO_BAR_AUD x, T_BAR y where ...
Хотя, используя @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
, Hibernate Envers сохранит ссылки с элементами Bar
текущего объекта.
Итак, как я могу решить свою проблему, не имея необходимости явно проверять таблицы T_BAR
и T_FOO_BAR
(таблица соединений)? В других словах, когда я извлекаю список bars
из моего объекта ревизии, я получаю список bars
от моего текущего объекта (поскольку ссылки между Foo
и Bar
не проверяются).
Спасибо.