Mam problem z usunięciem węzłów osieroconych przy użyciu JPA z następującym mapowaniem
@OneToMany (cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "owner")
private List<Bikes> bikes;
Mam problem z osieroconymi rolami kręcącymi się po bazie danych.
Mogę użyć adnotacji org.hibernate.annotations.Cascade
specyficznej dla Hibernate tag, ale oczywiście nie chcę wiązać mojego rozwiązania z implementacją Hibernate.
EDYCJA : Wygląda na to, że JPA 2.0 będzie to obsługiwać.
Jeśli używasz JPA 2.0, możesz teraz używać
orphanRemoval=true
atrybutu pliku@xxxToMany
adnotacji, aby usunąć sieroty.W rzeczywistości
CascadeType.DELETE_ORPHAN
został wycofany w wersji 3.5.2-Final.źródło
źródło
cascade = CascadeType.ALL, orphanRemoval = false
i usunę rodzica? Czy usunie dzieci, mimo że wyraźnie zabroniłem?Jeśli używasz JPA z EclipseLink, musisz ustawić @PrivateOwned adnotację .
Dokumentacja: Eclipse Wiki - Korzystanie z rozszerzeń EclipseLink JPA - Rozdział 1.4 Jak używać adnotacji @PrivateOwned
źródło
możesz użyć @PrivateOwned, aby usunąć sieroty, np
źródło
Po prostu znajduję to rozwiązanie, ale w moim przypadku nie działa:
orphanRemoval = true nie ma żadnego efektu.
źródło
Według Java Persistence with Hibernate , kaskadowe usuwanie osierocone nie jest dostępny w postaci adnotacji WZP.
Nie jest również obsługiwany w formacie JPA XML.
źródło
Miałem ten sam problem i zastanawiałem się, dlaczego ten warunek poniżej nie usuwa sierot. Lista potraw nie została usunięta w Hibernate (5.0.3.Final), kiedy wykonałem nazwane zapytanie o usunięcie:
Wtedy przypomniałem sobie, że nie wolno mi używać nazwanego zapytania usuwającego , ale EntityManager. Ponieważ użyłem tej
EntityManager.find(...)
metody, aby pobrać jednostkę, a następnieEntityManager.remove(...)
ją usunąć, naczynia również zostały usunięte.źródło
Właśnie
@OneToMany(cascade = CascadeType.ALL, mappedBy = "xxx", fetch = FetchType.LAZY, orphanRemoval = true)
.Usuń targetEntity = MyClass.class , działa świetnie.
źródło
Dla dokumentacji, w OpenJPA przed JPA2 było to @ElementDependant.
źródło
Używałem mapowania jeden do jednego, ale dziecko nie było usuwane. JPA powodowało naruszenie klucza obcego
Po użyciu orphanRemoval = true problem został rozwiązany
źródło