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():

kopiuje stan danego obiektu na trwały obiekt o tym samym identyfikatorze. Jeśli nie ma trwałej instancji aktualnie powiązanej z sesją, zostanie ona załadowana. Zwraca instancję persistent. Jeśli dana instancja jest niezapisana, Zapisz jej kopię i zwróć ją jako nowo trwałą instancję. Dana instancja nie jest kojarzona z sesją. Ta operacja jest kaskadowana do powiązanych instancji, jeśli powiązanie jest mapowane za pomocą Cascade=”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?

daj nam znać, jeśli podobał Ci się post. Tylko w ten sposób możemy się poprawić.
Tak
Nie

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()…

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.