Uso Hibernate Envers para auditar mis entidades.¿Cómo no auditar una tabla de unión y entidades relacionadas usando Hibernate Envers?
Tengo una entidad auditada, Foo
, que tiene un List<Bar>
como propiedades. Sin embargo, no quiero auditar las entidades Bar
. Por lo tanto, escribí que:
@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;
}
}
Ahora, quiero recuperar una revisión de Foo
:
AuditReader reader = AuditReaderFactory.get(getEntityManager());
Foo revision = (Foo) reader.createQuery().forEntitiesAtRevision(Foo.class, 42).getSingleResult();
Por desgracia, cuando quiero recuperar todos los datos (es decir, cuando éste se carga perezosa la bars
) , me sale el error ORA-00942: table or view does not exist
, ya que trató de consultar:
select ... from T_FOO_BAR_AUD x, T_BAR y where ...
I sin embargo que el uso de @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
, Hibernate Envers gustaría mantener el enlace s con los Bar
elementos de la entidad actual.
Entonces, ¿cómo puedo resolver mi problema, sin tener que auditar explícitamente las tablas T_BAR
y T_FOO_BAR
(la tabla de unión)? En otras palabras, cuando recupero la lista de bars
de mi entidad de revisión, obtengo la lista de bars
de mi entidad actual (ya que los enlaces entre Foo
y Bar
no se auditan).
Gracias.