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.