Gegeben eine Entität, die von Envers geprüft wird, die eine Auflistung enthält.Hibernate Enver: @AuditJoinTable Zeilen fehlen
Entity A
@Audited
public class A{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
....
@OneToMany
@JoinColumn(name = "a_id")
@AuditJoinTable(name = "A_B_AUDIT"
,inverseJoinColumns = @JoinColumn(name = "a"))
private List<B> bs;
....
}
Entity B
@Audited
public class B{
@Id
private int id;
....
@Column(name = "a_id")
private int aId;
@ManyToOne
@JoinColumn(name = "a_id", insertable = false, updatable = false)
private A a;
}
nach ihren documentation Envers speichert die Prüfinformationen für Additionen und Deletionen an diese AuditJoinTables (A_B_AUDIT). Aber leider funktioniert das nicht und die Zeilen in den Tabellen fehlen.
Als ich betreiben mein Projekt folgenden Tabellen erstellt wird:
A_AUDIT
B_AUDIT
A_B_AUDIT
Ich habe getrennte Regler Ein Objekt und B Objekt zu bestehen. Wenn ich versuche, B mit aId und A zu speichern, wird audit_table (A_B_AUDIT) nicht aktualisiert, aber B_AUDIT mit aktualisierter Revision wird aktualisiert.
Kann mir bitte jemand sagen, was ich hier vermisse.
Vielen Dank !!
Hibernate Enver Version: 5.1.4.Final
Ich habe sowohl mit Master und 5.1.4 getestet und ich kann Ihr Problem nicht reproduzieren, so dass es etwas sehr Spezifisches mit der Einstellung der Werte auf beiden Seiten der Beziehung sein muss. Könnten Sie Ihren Code dort einfügen, wo Sie Ihre Entitäten erstellen und zuordnen, bevor Sie fortfahren? – Naros
Hallo @Naros, ich habe separate Controller für beide und auf der Basis von aId mapping (Hibernate) wähle ich die Assoziationen. –
Es hört sich so an, als würden Sie 'B' und' A' in separaten Transaktionen beibehalten und die einzige Verbindung, die Sie zwischen ihnen aufbauen, ist 'B # aId' mit der Kennung' A'. Wenn das wahr ist und Sie nicht auch 'B' explizit zu der Liste in' A' hinzufügen, dann werden Sie am Ende keine Werte in der Join-Tabelle platzieren. So funktioniert Persistenz nicht. Sie müssen sicherstellen, dass Sie alle erforderlichen Attribute zusammen beibehalten, sonst erhalten Sie einen Teilstatus und Envers füllt den Überwachungsverlauf nicht korrekt auf. Wenn dies nicht das ist, was Sie tun, müssen Sie den eigentlichen Code erneut posten. – Naros