Ich arbeite die Vermutung der folgenden Abbildungen aus:
@Entity
@Audited
public class EntityA {
/* other properties & getters/setters */
@OneToMany(mappedBy = "a", cascade = CascadeType.ALL)
private List<EntityB> bList;
}
@Entity
@Audited
public class EntityB {
/* other properties & getters/setters */
@ManyToOne
private EntityA a;
}
Immer, wenn Sie hinzufügen/entfernen, um ein EntityB
aus EntityA
, dies löst eine Revision Änderung im Zusammenhang mit EntityA
sowie den zugehörigen EntityB
der hinzugefügt wird,/aufgrund der Beziehung entfernt.
Aber wenn Sie sich entscheiden, Sie einige Attribute EntityB
ändern mögen, die keinen direkten Einfluss auf EntityA
haben, wird es nur eine Version für EntityB
und nicht EntityA
, siehe unten erzeugt werden.
entityManager.getTransaction().begin();
final EntityA a = entityManager.find(EntityA.class, aId);
for (EntityB b : a.getbList()) {
b.setName(b.getName() + "-modified");
}
entityManager.merge(a);
entityManager.getTransaction().commit();
Wenn Sie die einzelnen Revisionen EntityB
in diesem Fall benötigen, müssen Sie eigentlich speziell stattdessen für EntityB
durch die AuditReader
Schnittstelle abzufragen.
Verwenden Sie 'org.hibernate.envers.global_with_modified_flag' oder setzen Sie' modifiedFlags = true' in der '@ Geprüften' Annotation der Relation? – Naros
Wo platziere ich die Tags? auf der Beziehung oder in den Eigenschaften von Entität B – codenoob
Ist Entität B als @auditable markiert? –