Ich bin derzeit bemüht, eine Entität zu löschen, die in verschiedenen Beziehungen beteiligt ist (Nur @ManyToOne
) - Hibernate löscht jedoch nichts - nach dem Aufruf em.remove
bleibt alles unverändert.Hibernate EntityManager: Entfernen referenzierte Entity funktioniert nicht
Ich habe 5 Einheiten (E1 - E5
), Verweis auf die Entität (E6
) in Frage wie folgt aus:
@Entity
public class EX {
@OneToMany(mappedBy = "eX", fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST, CascadeType.REMOVE })
private Set<E6> e6s;
}
E6
selbst hat die umgekehrte @ManyToOne
Relations:
public class E6{
@ManyToOne(optional = false)
private E1 e1;
@ManyToOne(optional = false)
private E2 e2;
@ManyToOne(optional = false)
private E3 e3;
@ManyToOne(optional = false)
private E4 e4;
@ManyToOne(optional = false)
private E5 e5;
}
(links out ids, zusätzliche Spalten etc ...)
Immer wenn ich rufe em.remove(instanceOfE6)
, einfach nichts geschieht. Ich habe Hibernate SQL-Output hinzugefügt und kann keinen einzigen Versuch sehen, eine DELETE
Abfrage auszuführen.
Da die Streichung von einer Ajax-Anforderung und ein frisch EntityManager passieren kann, habe ich einen Anruf vor dem Löschen zu fusionieren, verursache otherwhise Ich erhalte eine Entity nicht verwaltete Ausnahme:
em.remove(em.merge(instanceOfE6));
Aber nichts . Staat bleibt unverändert.
Also habe ich versucht, eine @PreRemove
Methode, um alle Beziehungen zu löschen, bevor Sie die Entität löschen ... Methode wird nie aufgerufen.
Ich habe verschiedene Cascade-Operationen (einschließlich Cascade.ALL
) ausprobiert - aber da alles, was ich brauche, Entfernen und Bleiben ist, sollte das auch funktionieren.
Ich dachte über eine native Delete-Anweisung (jede Einheit hat eine Surrogat-ID, so dass würde höchstwahrscheinliche Arbeit) - aber da alles innerhalb eines AJAX-Aufrufs geschieht, ich will nicht, dass die Verwendung , weil ich den Persistence-Cache aktualisiert haben möchte, ohne jede beteiligte Entität neu zu laden ...
Irgendwelche Ideen?
Wenn Sie mehr Quelle benötigen, schreiben Sie mir einfach einen Kommentar.
Ich habe auch versucht die fragliche Einheit von ALLEN Beziehungen (Objekt-weise) und em.merge()
auf einer der verbleibenden Einheiten rufen zu entfernen, in der Hoffnung, Hibernate die unverbundenen Unternehmen whipe - kein Glück.
Haben Sie die Transaktion abgeschlossen? –
Haben Sie 'em.flush()' aufgerufen? – jmvivo
@DavidLevesque Running Hibernate im Autocommit-Modus ... – dognose