Ich habe Probleme beim Löschen verwaister Knoten mithilfe von JPA mit der folgenden Zuordnung
@OneToMany (cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "owner")
private List<Bikes> bikes;
Ich habe das Problem mit den verwaisten Rollen, die in der Datenbank hängen.
Ich kann das Annotation org.hibernate.annotations.Cascade
Hibernate-spezifische Tag verwenden, möchte meine Lösung aber natürlich nicht in eine Hibernate-Implementierung einbinden.
EDIT : Es scheint, dass JPA 2.0 dies unterstützen wird.
Wenn Sie JPA 2.0 verwenden, können Sie jetzt das
orphanRemoval=true
Attribut der@xxxToMany
Anmerkung verwenden, um Waisen zu entfernen.Eigentlich wurde
CascadeType.DELETE_ORPHAN
in 3.5.2-Final veraltet.quelle
quelle
cascade = CascadeType.ALL, orphanRemoval = false
den Elternteil habe und lösche? Wird es Kinder löschen, obwohl ich ausdrücklich gesagt habe, dass ich es NICHT tun soll?Wenn Sie JPA mit EclipseLink verwenden, müssen Sie die Annotation @PrivateOwned festlegen .
Dokumentation: Eclipse-Wiki - Verwenden von EclipseLink-JPA-Erweiterungen - Kapitel 1.4 Verwenden der Annotation @PrivateOwned
quelle
Sie können @PrivateOwned verwenden, um Waisenkinder zu löschen, z
quelle
Ich finde nur diese Lösung, aber in meinem Fall funktioniert sie nicht:
orphanRemoval = true hat keine Auswirkung.
quelle
Laut Java Persistence with Hibernate ist das Löschen von Kaskadenwaisen nicht als JPA-Anmerkung verfügbar.
Es wird auch in JPA XML nicht unterstützt.
quelle
Ich hatte das gleiche Problem und fragte mich, warum diese Bedingung die Waisen nicht löschte. Die Liste der Gerichte wurde im Ruhezustand (5.0.3.Final) nicht gelöscht, als ich eine benannte Löschabfrage ausführte:
Dann fiel mir ein, dass ich keine benannte Löschabfrage verwenden darf , sondern den EntityManager. Da ich die
EntityManager.find(...)
Methode verwendet habe, um die Entität abzurufen und dannEntityManager.remove(...)
zu löschen, wurden auch die Gerichte gelöscht.quelle
Einfach
@OneToMany(cascade = CascadeType.ALL, mappedBy = "xxx", fetch = FetchType.LAZY, orphanRemoval = true)
.Entfernen Sie targetEntity = MyClass.class , es funktioniert hervorragend.
quelle
Für die Datensätze war es in OpenJPA vor JPA2 @ElementDependant.
quelle
Ich habe eine Eins-zu-Eins-Zuordnung verwendet, aber das Kind wurde nicht gelöscht. JPA hat eine Verletzung des Fremdschlüssels verursacht
Nach der Verwendung von orphanRemoval = true wurde das Problem behoben
quelle