revision_on_collection_change org envers ejemplo data auditoria java hibernate hibernate-envers

java - org - ¿Cómo no auditar una tabla de unión y entidades relacionadas utilizando Hibernate Envers?



spring boot hibernate audit (1)

Parece que estás usando @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) cuando deberías usar @NotAudited en tu caso.

RelationTargetAuditMode.NOT_AUDITED simplemente no auditará la entidad objetivo . Aún intentará auditar la propiedad List<Bar> de Foo y, por lo tanto, la tabla de unión.

De los documentos:

Si desea auditar una relación, donde la entidad objetivo no se audita (como es el caso, por ejemplo, con entidades similares a diccionarios, que no cambian y no tienen que ser auditadas), simplemente anote con @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) . Luego, cuando lea versiones históricas de su entidad, la relación siempre apuntará a la entidad relacionada "actual".

Uso Hibernate Envers para auditar mis entidades.

Tengo una entidad auditada, Foo , que tiene una List<Bar> como propiedades. Sin embargo, no quiero auditar las entidades del Bar . Así, 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();

Desafortunadamente, cuando quiero recuperar todos los datos (es decir, cuando se cargan las bars forma perezosa), obtengo el error ORA-00942: table or view does not exist , ya que intenté consultar:

select ... from T_FOO_BAR_AUD x, T_BAR y where ...

Pensé que al usar @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) , Hibernate Envers mantendría los enlaces con los elementos de la Bar 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.