2012-11-22 11 views
9

Na początku oczekiwałem, że z CascadeType.REMOVE będę w stanie usunąć klucze obce w moim stole, ale mam próg, ale mam wyjątek. Ale z @CascadeOnDelete jest ok. Jaka jest różnica między tymi dwoma adnotacjami?Jaka jest różnica między adnotacjami @CascadeOnDelete i CascadeType.REMOVE?

EDIT: ja zobaczyłem DataNucleus' comment.Cascade Delete pochodzi z org.eclipse.persistence.annotations.CascadeOnDelete Który pojawia się pytanie, jak dobrym pomysłem jest do użycia.

+1

Jaki wyjątek dostałeś? – Ilya

+1

@CascadeOnDelete nie jest częścią JPA, więc sugeruję, aby wspomnieć, skąd pochodzi – DataNucleus

+1

Wyjątek: "USUŃ w tabeli" XXX "spowodował naruszenie ograniczenia klucza obcego" YYY "dla klucza (xxx). Oświadczenie zostało wycofane. " – npocmaka

Odpowiedz

6

Gdy używasz CascadeType.Remove w czasie, gdy kaskadowanie będzie obsługiwane przez narzędzie ORM, ale gdy chcesz, aby kaskadowanie było obsługiwane przez bazę danych, możesz użyć @ CascadeOnDelete.but, gdy używasz @CascadeOnDelete, upewnij się, że Baza danych, z której korzystasz, powinna obsługiwać kaskadowanie.

+0

Dzięki. Oznacza to, że lepiej jest unikać CascadeOnDelete, jeśli jest to możliwe ... – npocmaka

+3

To zależy od tego, jak go używasz.jeśli kod ma być ściśle zgodny ze specyfikacją JPA, to nie należy używać CascadeOnDelete.Ale jeśli masz pewność, że jeśli nie będziesz zmieniał dostawcy JPA, może być użyteczne użycie CascadeonDelete. Więcej informacji można znaleźć [link] (http://wiki.eclipse.org/EclipseLink/Examples/JPA/DeleteCascade) –

Powiązane problemy