typy kaskadowe Hibernate JPA

o mapowaniu powiązanych jednostek w hibernate dowiedzieliśmy się już w poprzednich samouczkach, takich jak mapowanie jeden do jednego i mapowanie jeden do wielu. Tam chcieliśmy zapisać zmapowaną istotę, gdy podmiot właściciela relacji został zapisany. Aby to włączyć, użyliśmy atrybutu „CascadeType”. W tym samouczku typu kaskadowego JPA, dowiemy się o różnych rodzajach dostępnych opcji kaskadowania poprzez CascadeType.

jak działają typy kaskadowe JPA?

zanim przejdziemy do przodu, przyjrzyjmy się, jak ten atrybut typu kaskadowego jest zdefiniowany w kodzie. Weźmy przykład dla lepszego zrozumienia. Weź scenariusz, w którym pracownik może mieć wiele kont; ale jedno konto musi być powiązane tylko z jednym pracownikiem. Stwórzmy podmioty z minimalną ilością informacji dla jasności.

pracownik.Java

konto.java

spójrz na pogrubioną linię w powyższym kodzie źródłowym dla EmployeeEntity.java. Definiuje ” cascade=CascadeType.ALL„I zasadniczo oznacza to, że każda zmiana nastąpiła na EmployeeEntity musi również przebiegać kaskadowo do AccountEntity. Jeśli zapiszesz pracownika, wszystkie powiązane konta zostaną również zapisane w bazie danych. Jeśli usuniesz pracownika, wszystkie konta powiązane z tym pracownikiem również zostaną usunięte. Dość proste.

ale co, jeśli chcemy tylko kaskadowo zapisywać tylko operacje, ale nie usuwać operacji. Następnie musimy jasno określić go za pomocą poniższego kodu.

teraz tylko wtedy, gdy metody save() lub persist() są wywoływane przy użyciu instancji employee, wtedy tylko konta będą utrzymywane. Jeśli jakakolwiek inna metoda jest wywoływana na sesji, jej efekt nie wpłynie / kaskada do kont.

typy kaskadowe JPA

typy kaskadowe obsługiwane przez architekturę Java Persistence są następujące:

  1. CascadeType.PERSIST :Typ kaskadowy presist oznacza, że operacje save() lub persist() są kaskadowe dla powiązanych jednostek.
  2. CascadeType.Połącz : Typ kaskadowy merge oznacza, że powiązane jednostki są scalane, gdy podmiot będący właścicielem jest scalany.
  3. CascadeType.REFRESH :Typ cascaderefresh robi to samo dla operacji refresh ().
  4. CascadeType.Usuń: Typ kaskadowy remove usuwa wszystkie powiązane jednostki z tym ustawieniem, gdy podmiot będący właścicielem jest usuwany.
  5. CascadeType.Odłączanie: Typ kaskadowy detach odłącza wszystkie powiązane jednostki, jeśli wystąpi „ręczne odłączanie”.
  6. CascadeType.Wszystkie : Typ kaskadowy all jest skrótem dla wszystkich powyższych operacji kaskadowych.

w JPA nie ma domyślnego typu kaskadowego. Domyślnie żadne operacje nie są wykonywane kaskadowo.

Opcja konfiguracji kaskadowej akceptuje tablicę typów kaskadowych; tak więc, aby uwzględnić tylko odświeżania i scalanie w operacji kaskadowej dla relacji jeden do wielu, jak w naszym przykładzie, możesz zobaczyć następujące:

powyżej kaskadowa spowoduje, że kolekcja kont będzie tylko scalana i odświeżana.

Hibernate Kaskada typów

teraz pozwala zrozumieć, co jest kaskada w hibernate, w którym scenariuszu go używamy.

poza typami kaskadowymi JPA, istnieje jeszcze jedna operacja kaskadowa w hibernate, która nie jest częścią omawianego powyżej zestawu normalnego, zwana „usuwaniem osieroconych”. Powoduje to usunięcie posiadanego obiektu z bazy danych po usunięciu go z relacji własności.

zrozummy na przykładzie. W naszym przykładzie jednostki pracowniczej i konta zaktualizowałem je jak poniżej i wspomniałem „orphanRemoval = true” na kontach. Zasadniczo oznacza to, że za każdym razem, gdy usunę „konto z konta” (co oznacza, że usuwam relację między tym kontem a pracownikiem), należy również usunąć podmiot konta, który nie jest powiązany z żadnym innym pracownikiem w bazie danych (np. sierota).

pracownik.Java

konto.java

TestOrphanRemovalCascade.java

jest to bardzo dobry sposób na usunięcie pasujących/niedopasowanych elementów z kolekcji (np. relacji wiele-do-jednego lub jeden-do-wielu). Wystarczy usunąć przedmiot z kolekcji, a hibernate zajmie się resztą rzeczy za Ciebie. Sprawdzi, czy encja jest odwoływana z dowolnego miejsca, czy nie; jeśli tak nie jest, usunie encję z samej bazy danych.

Daj mi znać o swoich przemyśleniach i pytaniach na temat hibernate 5 typów kaskadowych lub typów kaskadowych JPA, jeśli w ogóle.

udanej nauki !!

Oracle Blog o typach kaskadowych

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

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.