Gelöschte Entität übergeben, um bestehen bleiben Ausnahme
Ich habe diese Art von Entitäten:
Dokument
| n ..
zu
..1 |
DocumentType
| 1 ..
zu
.. n |
Art der Unterkunft
| 1 ..
zu
.. n |
DocumentProperty
Ich einfach versuchen, Sie zu entfernen um ein Dokument, wie:
entityManager.entfernen(Dokument);
aber ein Fehler wird ausgelöst:
16:45:51,499 FEHLER [[Seam Resource Servlet]] Servlet.service() for servlet, Seam Resource Servlet warf Ausnahme
javax.die Persistenz.EntityNotFoundException: gelöschte Entität übergeben zu bestehen: [up.docstore.Art der Unterkunft#]
Das problem scheint zu kommen von hier:
@OneToMany(mappedBy = "documentType", cascade = {CascadeType.ALL}, fetch = FetchType.EAGER)
@ForeignKey(name = "FK_DOCUMENT_TYPE__PROPERTY_TYPE")
@Sort(type = SortType.NATURAL)
private SortedSet<PropertyType> propertyTypes = new TreeSet<PropertyType>();
Wenn ich entfernen CascadeType.BESTEHEN Sie alle es zu arbeiten.
Aber ich brauche es es und auch ich muss es EIFRIG.
Weiß jemand eine andere Lösung?
Bearbeiten: entfernt DELETE_ORPHAN Kaskade, aber immer noch das gleiche problem.
InformationsquelleAutor Cristian Boariu | 2010-02-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lösung:
Warum diese Lösung?
InformationsquelleAutor
Ich nehme an, Sie haben genannt
remove()
auf eine ArtPropertyType
vor. Rufen Sieremove()
nur für den "root" - Einheit, und entfernen Sie die anderen mit etwas wie:Und behalten die
DELETE_ORPHAN
Können Sie dann, nach der überprüfung, die Sie nicht manuell aufgerufen
remove()
auf andere Entitäten, versuchen Sie den Aufruf:so, dass die
EntityManager
reassociates das Objekt mit der ersten Sitzung.tripple prüfen Sie, ob Sie nicht den Aufruf zu entfernen, irgendwo 😉 dann siehe mein update
InformationsquelleAutor
Ich sehe, Sie setzen die
cascade
an zwei Orten : der@OneToMany
und die@Cascade
. Ich denke, dies kann ein problem sein, wenn der eine überschreibt den anderen ...Den Fehler, den Sie melden möchten, brauchen Sie etwas mehr Kontext verständlich ist. "Das löschen eines bereits gelöschten Entität" bezieht sich eindeutig zwei Operationen .... Sie müssen Angaben über den Zustand vor, den Operationen und den Zustand danach (mit "Staat" meine ich den Zustand in der Datenbank...).
laut hibernate-docs (zu faul zu suchen jetzt) die
@Cascade
fügt hinzu, um die JPA -cascade
Attribut nicht überschreiben.Danke für diese Präzision, die in der Theorie ;-). Ich wünschte, jemand getestet, wie dies in der Praxis, vielleicht Cristian?? 🙂
InformationsquelleAutor
Scheint es, wie die Cascade-Optionen irgendwo machen den Entity-Manager denken, dass dieses Objekt oder ein anderes Objekt in der Kette muss beibehalten werden, wenn Sie anrufen, em.entfernen(Dokument). Benötigen Sie mehr Einzelheiten...
InformationsquelleAutor