Как не проводить аудит таблицы соединений и связанных объектов с помощью Hibernate Envers?

Я использую Hibernate Envers для аудита своих сущностей.

У меня есть один проверенный объект, Foo, который имеет List<Bar>в качестве свойств. Однако я не хочу проверять объекты 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не проверяются )..

Спасибо.

23
задан Romain Linsolas 12 July 2012 в 10:10
поделиться