Hibernate scalanie i odświeżanie encji
w poprzednim samouczku dowiedzieliśmy się o zapisywaniu encji przy użyciu metod save()
lub saveOrUpdate()
w hibernate. Tam dowiedzieliśmy się, że w większości przypadków nie będziesz nawet potrzebował tych metod, ponieważ hibernate automatycznie zarządza aktualizacjami trwałych jednostek. W większości przypadków trzeba tylko dbać o obiekty przejściowe. W tym samouczku omawiam kilka myśli na temat metody refresh()
i merge()
obecnej w klasie hibernate session.
Odświeżanie encji hibernacji za pomocą metody refresh ()
czasami mamy do czynienia z sytuacją, w której baza danych aplikacji jest modyfikowana za pomocą jakiejś zewnętrznej aplikacji/agenta, a zatem odpowiadająca jej encja hibernacji w Twojej aplikacji faktycznie traci synchronizację z jej reprezentacją bazy danych, tzn. ma stare dane. W takim przypadku można użyć metody session.refresh()
, aby ponownie wypełnić encję najnowszymi danymi dostępnymi w bazie danych.
możesz użyć jednej z metod refresh () w interfejsie sesji, aby odświeżyć instancję trwałego obiektu, w następujący sposób:
public void refresh(Object object) throws HibernateExceptionpublic void refresh(Object object, LockMode lockMode) throws HibernateException
metody te przeładują właściwości obiektu z bazy danych, nadpisując je. W rzeczywistych aplikacjach, nie trzeba używać metody refresh()
bardzo często poza wyżej podanym scenariuszem.
spójrzmy na przykład metody refresh ().
Spójrz powyżej zaznaczonych linii.
- linia 15 Zapisz pracownika imieniem „Lokesh”
- linia 26 Ustaw imię „Vikas”. Ponieważ encja jest odłączona, DB nie będzie aktualizowany.
- linia 27 odświeża encję z bazą danych za pomocą metody
refresh()
. - linia 32 zweryfikuj, czy firstname ustawione w encji zostało zaktualizowane o „Lokesh”, ponieważ to właśnie baza danych ma ten moment.
chodziło o metodę odświeżania. Spójrzmy na inną podobną metodę merge()
.
łączenie encji hibernacji za pomocą metody merge ()
metoda merge()
robi dokładnie odwrotnie do tego, co refresh()
robi, tzn. aktualizuje bazę danych o wartości z odłączonego encji. Metoda Refresh aktualizowała encję o najnowsze informacje z bazy danych. Więc zasadniczo oba są dokładnie przeciwne.
Scalanie jest wykonywane, gdy chcesz ponownie zmienić odłączony element na stan trwały, a zmiany odłączonego elementu zostaną przeniesione do bazy danych (lub nadpisane). Sygnatury metod dla operacji scalania to:
Object merge(Object object)Object merge(String entityName, Object object)
oficjalna dokumentacja Hibernate daje bardzo dobre wyjaśnienie metody merge()
:
więc jeśli wezmę na przykład poniższy kod, poniżej wymienione punkty powinny być dla ciebie jasne.
EmployeeEntity mergedEmpEntity = session.merge(empEntity);
- ’empEntity’ jest odłączoną jednostką, gdy jest przekazywana do metody merge ().
- metoda merge() wyszukuje już załadowaną instancję EmployeeEntity z informacjami o identyfikatorze pobranymi z empEntity. Jeśli taka trwała encja zostanie znaleziona, będzie ona używana do aktualizacji. Innymi słowy, nowy EmployeeEntity jest ładowany do sesji przy użyciu tych samych informacji identyfikacyjnych, które są obecne w „empEntity”.
- dane są kopiowane z ’empEntity’ do nowo znalezionego/załadowanego obiektu.
- ponieważ nowy / znaleziony obiekt jest trwały, wszystkie dane skopiowane do niego z ’empEntity’ są automatycznie zapisywane w bazie danych.
- odwołanie do tej nowej jednostki jest zwracane z metody merge() i przypisywane do zmiennej 'mergedEmpEntity’.
- ’empEntity’ jest nadal podmiotem odłączonym.
w powyższym przykładzie 'mergedPersistentEmpEntity’ jest nową jednostką, która jest trwała. Więc jeśli chcesz więcej zmian, a następnie wprowadzić w’ mergedPersistentEmpEntity ’ instancji.
to wszystko dla tego tutoriala obejmującego metody merge()
i refresh()
w hibernate. Pamiętaj, że pytanie może być zadane jako różnica między merge()
i refresh()
lub różnica między merge()
i load()
itd. Przygotuj się na taką różnicę między pytaniami kwalifikacyjnymi.
Szczęśliwej Nauki !!
czy ten post był pomocny?
w poprzednim samouczku dowiedzieliśmy się o zapisywaniu encji przy użyciu metod save() lub saveOrUpdate() w hibernate. Tam dowiedzieliśmy się, że w większości przypadków nie będziesz nawet potrzebował tych metod, ponieważ hibernate automatycznie zarządza aktualizacjami trwałych jednostek. W większości przypadków trzeba tylko dbać o obiekty przejściowe. W tym samouczku omawiam kilka myśli na temat metody refresh()…
w poprzednim samouczku dowiedzieliśmy się o zapisywaniu encji przy użyciu metod save() lub saveOrUpdate() w hibernate. Tam dowiedzieliśmy się, że w większości przypadków nie będziesz nawet potrzebował tych metod, ponieważ hibernate automatycznie zarządza aktualizacjami trwałych jednostek. W większości przypadków trzeba tylko dbać o obiekty przejściowe. W tym samouczku omawiam kilka myśli na temat metody refresh()…