Co właściwie robi CascadeType.REFRESH?


82

Co CascadeType.REFRESHwłaściwie robi?

Definicja jest taka

Kiedy odświeżamy jednostkę, odświeżają się również wszystkie jednostki przechowywane w tym polu

ale co to oznacza w praktyce? Czy ktoś mógłby mi podać prosty przykład?

Odpowiedzi:


119

Poszczególne opisy CascadeType mogą być nieco zagmatwane, ale można to łatwo zrozumieć na podstawie ogólnego przypadku.

Dla dowolnej CascadeTypewartości oznacza to, że jeśli operacja Xjest wywoływana na instancji przy użyciu EntityManagerinterfejsu, a ta instancja ma odwołania do innych instancji jednostek, a to powiązanie zostało CascadeType.Xzdefiniowane, EntityManageroperacja zostanie również zastosowana do tej skojarzonej jednostki.

Więc EntityManager.refresh()jest definiowany jako:

Odśwież stan instancji z bazy danych, nadpisując zmiany wprowadzone w jednostce, jeśli takie istnieją.

Więc jeśli jednostka A ma odwołanie do jednostki B, a to odwołanie jest opatrzone adnotacją @CascadeType.REFRESHi EntityManager.refresh(A)jest wywoływane, to EntityManager.refresh(B)jest również wywoływane niejawnie.


Wiem, że to stary post, ale używając powyższego przykładu A i B, jeśli wystąpienie B jest obecnie odłączone, czy CascadeType.PERSIST spowoduje, że B stanie się trwały? Używam implementacji JPA Hibernate.
Andy

4
Odpowiedziałem na moje pytanie. Odpowiedź brzmi: nie. Aby obiekt stał się trwały, musisz wywołać zapisywanie na obiekcie.
Andy

Co się stanie, jeśli połączę obiekt, który jest w stanie trwałym?
abhijeet pathak

9

Pobieranie przez odświeżanie: obiekty zarządzane można ponownie załadować z bazy danych przy użyciu metody odświeżania:

Zawartość zarządzanego obiektu w pamięci jest odrzucana (w tym ewentualne zmiany) i zastępowana danymi, które są pobierane z bazy danych. Może to być przydatne, aby upewnić się, że aplikacja obsługuje najbardziej aktualną wersję obiektu jednostki, na wypadek gdyby mogła zostać zmieniona przez innego EntityManager od czasu jej pobrania.

Źródło: http://www.objectdb.com/java/jpa/persistence/retrieve

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.