2012-11-22 16 views
9

All'inizio mi aspettavo che con CascadeType.REMOVE sarei in grado di eliminare le chiavi esterne nella mia tabella, ma ho un'eccezione. Ma con @CascadeOnDelete va bene. Qual è la differenza tra le due annotazioni?Qual è la differenza tra le annotazioni @CascadeOnDelete e CascadeType.REMOVE?

EDIT: Ho visto la DataNucleus' comment.Cascade su Elimina viene da org.eclipse.persistence.annotations.CascadeOnDelete Quale lo solleva la questione di come buona idea è quella di essere utilizzato.

+1

Quale eccezione hai ottenuto? – Ilya

+1

@CascadeOnDelete non fa parte di JPA, quindi suggerisci di indicare da dove proviene – DataNucleus

+1

l'eccezione era: 'DELETE sulla tabella 'XXX' ha causato una violazione del vincolo di chiave esterna 'YYY' per la chiave (xxx). – npocmaka

risposta

6

Quando si utilizza CascadeType.Remove nel momento in cui il collegamento in cascata verrà gestito dallo strumento ORM ma quando si desidera che il collegamento in cascata venga gestito dal database, è possibile utilizzare @ CascadeOnDelete.but quando si utilizza @CascadeOnDelete, assicurarsi il database che si sta utilizzando dovrebbe supportare il collegamento in cascata.

+0

Grazie. Questo significa che è meglio evitare CascadeOnDelete se è possibile .... – npocmaka

+3

Dipende da come lo stai usando.se vuoi che il tuo codice sia strettamente conforme alle specifiche JPA allora tu non dovresti usare CascadeOnDelete.But se sei sicuro che se non cambierai il tuo provider JPA allora potrebbe essere utile usare CascadeonDelete. Per maggiori informazioni è possibile consultare [link] (http://wiki.eclipse.org/EclipseLink/Examples/JPA/DeleteCascade) –

Problemi correlati