2015-01-09 148 views
6

Przeszukałem odpowiedź, ale nie mogłem jej poprawnie odczytać. Jaka jest różnica między CascadeType.ALL, kaskada = CascadeType.REMOVE, orphanRemoval, gdy ustawiamy FetchType.EAGER na relacji @OneToMany? Raz miałem problem podczas usuwania rekordów. Użyłem następującychJaka jest różnica między CascadeType.ALL, cascade = CascadeType.REMOVE a orphanRemoval

@OneToMany(cascade = CascadeType.ALL, mappedBy = "companyEntity", fetch = FetchType.EAGER) 
Set<EmployeeEntity> employeeEntities; 

Kiedy próbowałem usunąć rekord pracownika, to nie pokazywał mi żadnych wyjątków i nie było rekordu deleteing. Ale kiedy zmieniłem CascadeType.ALL na CascadeType.REMOVE, to działało. Dlaczego to nie działało z CascadeType.ALL raczej z CascadeType.REMOVE?

Dziękuję za proste wyjaśnienie z góry;)

Odpowiedz

2

This wyjaśnia część Twojego pytania.

„OrphanRemoval = true” Vs „CascadeType.REMOVE”

Różnica pomiędzy tymi dwoma ustawieniami jest w odpowiedzi na usunięcie dziecko obiektów z kolekcji wskazanym przez jednostkę dominującą.

Jeśli określono parametr orphanRemoval = true, usunięta instancja adresu zostanie automatycznie usunięta z . Jeśli tylko cascade = CascadeType.REMOVE zostanie określony , nie zostanie podjęta żadna akcja automatyczna, ponieważ usunięcie relacji nie jest operacją usuwania.