Co oznaczają REFRESH i MERGE w odniesieniu do baz danych?


94

Jestem ciekawy i muszę szybko znaleźć tę odpowiedź. Google niewiele pomoże.

Interfejs API Java Persistence ma następujące właściwości, które nakazują platformie kaskadowe wykonywanie operacji na powiązanych jednostkach:

CascadeType.PERSIST
CascadeType.DELETE
CascadeType.MERGE
CascadeType.REFRESH

Wiem, co oznaczają pierwsze dwa: kiedy utrzymuję obiekt A, który ma B, utrwalam również B, a kiedy usuwam A, usuwam również B.

Ale nie rozumiem, co osiągnęli pozostali dwaj. Wsparcie?

Odpowiedzi:


80

REFRESH oznacza "ściągnij wszelkie zmiany stanu z bazy danych do mojej reprezentacji". Kaskadowo jest to proste; oznacza to, że wszystkie powiązane encje są odświeżane.

MERGE oznacza coś złożonego, co zbliża się do „zapisz”, ale bardziej przypomina „wypchnij odłączoną jednostkę z powrotem do stanu zarządzanego i zapisz zmiany jej stanu”; kaskadowanie oznacza, że ​​wszystkie skojarzone jednostki są wypychane z powrotem w ten sam sposób, a uchwyt jednostki zarządzanej, z którego wracasz, .merge()ma wszystkie skojarzone z nią jednostki zarządzane.

Link do jednej instancji odpowiednich dokumentów


1
Jaka jest wartość domyślna (jeśli nie ustawiliśmy żadnego CascadeType) i co jest najbardziej rozsądne / typowe do ustawienia?
Rosdi Kasim

@Rosdi Kasim: CascadeTypeDomyślnie pusta tablica.
user1438038

@chaos so refresh aktualizuje dzieci, aby pasowały do ​​tego, co jest w bazie danych, gdy rodzic jest aktualizowany / odświeżany. Scalanie zasadniczo nadpisze zaktualizowane pola w elementach podrzędnych w bazie danych, aby odzwierciedlić jednostki podrzędne z elementem nadrzędnym. Więc jeśli zostaną użyte oba, co się stanie? Wyobrażam sobie, że źle to zrozumiałem.
Jordan Mackie

87

Znaczenie adnotacji JPA dla relacji „wiele do wielu” :

  • ALL - wszystkie możliwe operacje kaskadowe wykonywane na encji źródłowej są kaskadowane do celu powiązania.
  • ŁĄCZENIE - jeśli podmiot źródłowy jest scalany, scalanie jest kaskadowane do celu powiązania.
  • UTRZYMAJ - jeśli jednostka źródłowa jest utrwalana, utrwalanie jest kaskadowane do celu powiązania.
  • REFRESH - jeśli jednostka źródłowa jest odświeżana, odświeżanie jest kaskadowane do celu powiązania.
  • USUŃ - jeśli jednostka źródłowa zostanie usunięta, cel powiązania również zostanie usunięty.

Sam widzę je w ten sposób (bardziej czytelne):

  • MERGE - dla istniejących obiektów, aby scalić istniejące dane w tabeli z danymi w moim obiekcie. (synchronizacja z bazą danych)
  • UTRZYMAJ - tworzy nowe rekordy z obiektu w bazie danych.
  • REFRESH - służy do odświeżenia danych w obiekcie. Być może nastąpiła zmiana w bazie danych, którą należy zsynchronizować. (synchronizacja z bazą danych)
  • REMOVE - to dobrze, usuń.

1
Javadoc dla adnotacji niczego dla mnie nie wyjaśnił. Dziękuję za odpowiedź!
André Chalella
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.