ja odziedziczyliśmy bazę kodu, na którym prawie wszystkie relacje mają następujące adnotacje:Kaskada JPA = REMOVE i Hibernate @OnDelete używane razem?
@OneToMany(fetch = FetchType.LAZY, cascade = { CascadeType.REMOVE }, mappedBy = "someThing")
@OnDelete(action = OnDeleteAction.CASCADE)
Teraz mam kłopoty ze zrozumieniem tego, co @OnDelete
robi w pierwszej kolejności. Hibernate: OnDelete vs cascade=CascadeType.REMOVE jest interesujący, ale niestety nie ma żadnych odpowiedzi, a JavaDoc dla @OnDelete
jest szczególnie bezwartościowy.
Z pozostałych pytań wygląda na to, że adnotacja OnDelete w jakiś sposób pozwala DB na kaskadowanie, podczas gdy dyrektywa kaskadowa na @OneToMany
pozwala ORM to zrobić, ale jaki byłby cel ich wykorzystania?
A czy dyrektywa kaskadowa @OneToMany
tak naprawdę nie pozwala, aby implementacja ORM generowała kaskadę opartą na DB?
Zachowanie z '@ OneToOne' i' @ OneToMany' nie wydaje się być zupełnie sama. Z '@OneToMany (...) @OdDelete (action = OnDeleteAction.CASCADE) Object doors', wydaje się, że usunięcie domu powoduje usunięcie wszystkich jego drzwi, ale usunięcie drzwi nie powoduje usunięcia domu. – Bruno
To musiałoby być "@OneToMany List
Nie zgadzam się. Myślę, że największą różnicą między '' 'CascadeType.REMOVE''''' '@ OnDelete''' w widoku użytkownika jest to, że' '@ OnDelete''' może pracować z JPAQL (ponieważ jest oparty na kaskadzie DB)), ale '' CascadeType.REMOVE''' nie może działać z JPAQL. – okwap