2016-06-22 25 views
0

Sagen wir, ich habe zwei Entitäten, A und B. A hat eine @ OneToMany Beziehung zu B und ich habe alle Eigenschaften in B überprüft. Wenn ich Envers verwende, um die Revisionen zu erhalten, bekomme ich nur die Änderungen in der Beziehung zwischen A und B, aber ich muss auch die Änderungen in den Eigenschaften von B erhalten. Gibt es einen Weg, dies zu tun?Hibernate Envers - Wie können Änderungen in einer Entität geprüft werden, die sich in einer @ OneToMany-Beziehung befindet?

Vielen Dank im Voraus!

+0

Verwenden Sie 'org.hibernate.envers.global_with_modified_flag' oder setzen Sie' modifiedFlags = true' in der '@ Geprüften' Annotation der Relation? – Naros

+0

Wo platziere ich die Tags? auf der Beziehung oder in den Eigenschaften von Entität B – codenoob

+0

Ist Entität B als @auditable markiert? –

Antwort

1

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.

+0

Danke, das habe ich gelernt, ich werde es versuchen und dich wissen lassen. – codenoob