Frage

Ich verwende Hibernate -Enver, um alle Änderungen an meinen Datenbankobjekten zu verfolgen. Diese Objekte werden manchmal durch eine (uni-direkte) Eltern-Kind-Beziehung verwandt. Da ich Abfragen benötige, die alle gelöschten Objekte auflisten sollen, verlasse ich mich auf die Audit -Tabelle in Entern, um gelöschte Objekte zu markieren (Spalte in *_aud). Diese Einträge scheinen jedoch für eines meiner Kinderobjekte nicht erstellt zu werden, wenn ihr übergeordnetes Objekt gelöscht wird.

Meine Objektklasse sieht so aus:

@Entity
@Audited
public class MyClass {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

@Column(nullable = false, unique = false, length = 1024)
private String name;

    // An object can have exactly one parent, but multiple children
@ManyToOne
@OnDelete(action = OnDeleteAction.CASCADE)
private MyClass parent;

}

Ich vermute, dass es etwas mit der Kaskade -Löschung zu tun hat, die irgendwie Hibernate -Enger umgeht. Wie kann ich das erreichen, dass die Einträge in der Audit -Tabelle für die Kinderobjekte erstellt werden, während immer noch sichergestellt wird, dass alle Kinder automatisch von der Datenbank gelöscht werden, wenn der referenzierte übergeordnete Eltern gelöscht wird?

War es hilfreich?

Lösung

Verwenden Sie @onDelete und Erzeugen Sie die DDL über Hibernate? In diesem Fall fügt Hibernate die Beziehung eine "On Cascade Delete" hinzu, was bedeutet, dass die Löschung der Kinder außerhalb des Hibernate stattfindet. Enver (oder Winterschlaf) haben also keinen Zugriff auf dieses Ereignis und reagieren nicht darauf.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top