Ich versuche, die Join-Spalten Werte in den Audit-Tabellen zu speichern, während die Join-Tabelle nicht überwacht.Hibernate-Envers Onetomany Join-Klasse nicht auditiert, aber Join-Spalten müssen auditiert werden
Hier sind meine Entity-Klassen.
Geprüfter Klasse INFO:
@Entity
@Audited
@Table(name = "INFO")
public class Info extends AbstractEntity {
@Id
@Column(name = "ID")
private String id;
/*More Columns */
@ManyToOne
@JoinColumns({ @JoinColumn(name = "FIRST_NAME", referencedColumnName = "FIRST_NAME"),
@JoinColumn(name = "LAST_NAME", referencedColumnName = "LAST_NAME") })
@NotAudited
private Details details;
}
nicht geprüft Klasse: Details:
@Entity
@Table(name = "DETAILS")
public class Details extends AbstractEntity {
@EmbeddedId
private DetailsPK detailsPK;
/*More Columns */
}
Primary Key/Join Felder werden hier definiert:
@Embeddable
public class DetailsPK implements Serializable {
@Column(name = "FIRST_NAME")
private String firstName;
@Column(name = "LAST_NAME")
private String lastName;
}
Hier die Details der Informationen statisch ... Es ändert sich nicht ... Daher muss man auditiert werden .... Aber wenn sich das Auditing INFO ändert, werde ich schwach t In der Tabelle INFO_AUD werden sowohl der Vorname als auch der Nachname erfasst. Gibt es eine Möglichkeit, dies zu spezifizieren?
Vielen Dank, Joe.
Naros, Vielen Dank für Ihre Hilfe ... Ich habe die obige Lösung versucht ... Aber die first_name und last_name in den Audit-Tabellen sind bevölkert noch nicht ... Auch meine Annahme war, dass in Ihrem Code .. Die details.getId() -Methode ist die details.getDetailsPK() -Methode. Ich habe Getter und Setter zu den Schattenspalten in der INFO-Entität hinzugefügt. Bitte raten ... Können Sie auch bitte auf erarbeiten, warum wir die resolveAuditedShadowColumns Methode müssen die Details Setter ... ich im Voraus entschuldigen, wie ich envers völlig neu bin und versuchen, das zu verstehen ... – Joe
@Joe Ich habe die Antwort komplett neu geschrieben. Meine vorherige Antwort war ein wenig verworren und nach ein paar Experimenten; Ich habe eine bessere Lösung gefunden, die sehr gut zu Ihren Bedürfnissen passt und unnötigen Overhead vermeidet. – Naros
Ich habe versucht, dies zu tun, bevor ich meine Frage gepostet habe und es hat nicht funktioniert ... Ich habe versucht, nur für den Fall ... und es funktioniert immer noch nicht .... Das Folgende ist die Zeilen Code, die ich ausprobiert habe. @ManyToOne @JoinColumns ({@JoinColumn (name = "FIRST_NAME", referencedColumnName = "FIRST_NAME"), @JoinColumn (name = "LAST_NAME", referencedColumnName = "LAST_NAME")}) @Audited (targetAuditMode = RelationTargetAuditMode .NOT_AUDITED) private Details Details; Hinweis: Meine Info_Aud-Tabelle hat die Spalten FIRST_NAME und LAST_NAME, aber nicht details_First_name und details_last_name columsn. – Joe