2009-09-10 33 views
61

Co właściwie robi CascadeType.REFRESH?Co właściwie robi CascadeType.REFRESH?

definicja jest

Kiedy odświeżyć podmiot wszystkie podmioty posiadały w tej dziedzinie odświeżyć zbyt

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

Odpowiedz

95

Poszczególne opisy CascadeType mogą być nieco mylące, ale jest łatwy sposób, aby to zrozumieć z ogólnego przypadku.

Dla każdego wartości CascadeType, oznacza to, że jeśli operacja X nazywa się na przykład za pomocą interfejsu EntityManager, a przykład ma odniesienia do innych przypadkach jednostki, a to stowarzyszenie CascadeType.X określone, to operacja EntityManager będzie również być stosowane do tego powiązanego podmiotu.

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

Odśwież stan instancji z bazy danych, zastępując zmian podmiotowi, jeżeli takie istnieją.

Więc jeśli podmiot A ma odniesienie do podmiotu B, a odniesienia opatrzone @CascadeType.REFRESH i EntityManager.refresh(A) nazywa, następnie EntityManager.refresh(B) niejawnie jest również tzw.

+0

Wiem, że to stary post, ale przy użyciu przykład A i B powyżej, jeśli instancja B jest obecnie indywidualny, by przyczyną CascadeType.PERSIST B stać się trwałe? Używam implementacji JPA Hibernate. – Andy

+3

Odpowiedziałem na moje własne pytanie. Odpowiedź brzmi: nie. Musisz wywołać save na obiekcie, aby stał się trwały. – Andy

3

pobierania przez Refresh: zarządzanych obiektów mogą być przeładowywane z bazy danych za pomocą metody Refresh:

Zawartość zarządzanego obiektu w pamięci zostaną usunięte (łącznie ze zmianami, jeżeli występują) i zastąpiono danymi, które jest pobrany z bazy danych. Może to być przydatne w celu zapewnienia, że ​​aplikacja obsługuje najbardziej aktualną wersję obiektu encji, na wypadek, gdyby mogła zostać zmieniona przez inny obiekt EntityManager, ponieważ został pobrany.

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

Powiązane problemy