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?

Kim L.
źródło

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.

skaffman
źródło
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

Etos
źródło