2012-11-22 4 views
9

Zuerst habe ich erwartet, dass mit CascadeType.REMOVE ich Fremdschlüssel in meiner Tabelle löschen kann, aber ich habe eine Ausnahme. Aber mit @CascadeOnDelete ist es in Ordnung. Was ist der Unterschied zwischen den beiden Anmerkungen?Was ist der Unterschied zwischen @CascadeOnDelete- und CascadeType.REMOVE-Anmerkungen?

EDIT: Ich habe die Datanucleus comment.Cascade auf Löschen sah kommt von org.eclipse.persistence.annotations.CascadeOnDelete .Welche wirft die Frage auf, wie gute Idee verwendet werden soll.

+1

Welche Ausnahme haben Sie bekommen? – Ilya

+1

@CascadeOnDelete ist nicht Teil von JPA. Daher sollten Sie erwähnen, wo es von – DataNucleus

+1

kommt. Die Ausnahme war: 'DELETE in Tabelle 'XXX' verursachte eine Verletzung der Fremdschlüsseleinschränkung 'YYY' für Schlüssel (xxx). Die Anweisung wurde zurückgerollt. – npocmaka

Antwort

6

Wenn Sie CascadeType.Remove zu dem Zeitpunkt verwenden, an dem die Kaskadierung von dem ORM-Tool behandelt wird, aber wenn Sie möchten, dass die Cascading von der Datenbank verarbeitet wird, können Sie @ CascadeOnDelete.but verwenden, wenn Sie @CascadeOnDelete verwenden Die von Ihnen verwendete Datenbank sollte Kaskadierung unterstützen.

+0

Thanks.This bedeutet, dass CascadeOnDelete besser zu vermeiden ist, wenn es möglich ist .... – npocmaka

+3

Es hängt davon ab, wie Sie es verwenden. Wenn Sie möchten, dass Ihr Code streng mit der JPA-Spezifikation übereinstimmt, dann Sie sollte CascadeOnDelete.But nicht verwenden, wenn Sie sicher sind, dass wenn Sie Ihren JPA-Provider nicht ändern, dann kann es nützlich sein, CascadeonDelete zu verwenden. Weitere Informationen finden Sie unter [link] (http://wiki.eclipse.org/EclipseLink/Examples/JPA/DeleteCascade) –

Verwandte Themen