Hibernate Flashcards

1
Q

Zalety ORM

A
  1. Abstrakcja bazy danych: Praca na poziomie obiektów zamiast SQL.
  2. Niezależność od bazy danych: Ułatwia zmianę systemu baz danych.
  3. Zwiększona produktywność: Skupienie na logice biznesowej, mniej ręcznego kodu SQL.
  4. Wsparcie dla skomplikowanych operacji: Dziedziczenie, kompozycja, wielowątkowość.
  5. Bezpieczeństwo: Ochrona przed atakami typu SQL Injection.
  6. Optymalizacja wydajności: Pamięć podręczna, leniwe ładowanie, wsparcie dla transakcji.
  7. Zarządzanie relacjami: Naturalne zarządzanie relacjami obiektów.
  8. Spójność: Jednolita reprezentacja danych.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
1
Q

Czym jest ORM

A

ORM, czyli Object-Relational Mapping , to technika programowania, która umożliwia konwersję danych pomiędzy systemami relacyjnymi baz danych a obiektowo zorientowanymi językami programowania.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Czym jest sesja w Hibernate?

A
  • Sesja w Hibernate reprezentuje pojedynczą jednostkę pracy z bazą danych.
  • Sesja umożliwia operacje CRUD (tworzenie, odczytzarządzanie transakcjami
  • dowolna ilość sesji w aplikacji
  • ywanie, aktualizację, usuwanie) na obiektach
  • zarządzanie transakcjami
  • zapewnia kontekst dla persystencji obiektów.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Czym jest SessionFactory w Hibernate?

A
  • specjalny obiekt, który jest punktem wyjścia do tworzenia aplikacji z hibernate
  • odpowiedzialna za tworzenie obiektów Session
  • odpowiedzialna za utrzymanie połączenia z bazą danych oraz konfiguracje
  • jjedna Session Factory dla każdej bazy danych
  • ma cache drugiego poziomu
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Najwżniejsze interfejsy w Hibernate

A

Configuration
SessionFactory
Session
Criteria
Query
Transaction

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Czym jest Lazy Loading w kontekście Hibernate?

A
  • Lazy Loading to technika ładowania danych w momencie, gdy są one rzeczywiście potrzebne
  • ## obiekty powiązane z głównym obiektem (np. kolekcje) nie są ładowane od razu razem z głównym obiektem, ale dopiero wtedy, gdy próbuje uzyskać do nich dostęp.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Czym jest cache ?

A
  • mechanizmu, który umożliwia przechowywanie obiektów w pamięci między sesjami (transakcjami),
  • pozwala na zmniejszenie liczby kosztownych zapytań do bazy danych
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Cache piewszego poziomu vs Cache drugiego poziomu

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

czym jest Hibernate Configuration File

A
  • hibernate.cfg.xml, to podstawowy plik XML używany do konfigurowania Hibernate.
  • określenie szczegółów dotyczących połączenia z bazą danych, właściwości dialektu bazy danych oraz innych globalnych ustawień
  • umożliwia określenie mapowanych klas lub plików mapowania, które definiują, jak obiekty Java powinny być przechowywane w bazie danych.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Podstawowe elementy hibernate.cfg.xml

A
  • dotyczące sterownika JDBC,
  • adresu URL bazy danych,
  • nazwy użytkownika, hasła itp.
  • wybór dialektu SQL,
  • konfiguracja cache 2 poziomu
  • format logowania zapytań SQL.
  • które klasy są mapowane do tabel w bazie danych.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

jak stworzyc klase immutable w hibernate przy pomocy XML?

A

markingmutable=false

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

CZYM JEST Hibernate Inheritance Mapping?

A
  • technika mapowania hierarchii dziedziczenia w klasach do struktur table w bazie danych
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Jakie są trzy główne strategie mapowania dziedziczenia w Hibernate?

A
  1. Table Per Class Hierarchy (Jedna tabela dla całej hierarchii).
  2. Table Per Concrete Class (Jedna tabela dla każdej konkretnej klasy).
  3. Table Per Subclass (Jedna tabela dla każdej podklasy).
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Opisz strategię “SingleTable Strategy”.

A
  • Wszystkie klasy w hierarchii dziedziczenia są mapowane na** jedną tabelę. **
  • Wprowadzenie kolumny dyskryminatora, która określa typ konkretnej instancji.
  • Kolumny, które nie są wspólne dla wszystkich podklas, mogą mieć wartość NULL.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Opisz strategię “Table Per Concrete Class”.

A
  • Dla każdej konkretnej klasy w hierarchii dziedziczenia tworzona jest osobna tabela.
  • Nie ma potrzeby kolumny dyskryminatora.
  • Może to prowadzić do powielenia kolumn w wielu tabelach i konieczności wielokrotnego odwzorowania wspólnych atrybutów w każdej tabeli.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Opisz strategię “Table Per Subclass”.

A
  • Dla każdej klasy w hierarchii dziedziczenia tworzona jest osobna tabela, ale jedynie z atrybutami, które są unikalne dla tej klasy.
  • Tablice są połączone za pomocą klucza głównego.
  • Eliminuje problem wartości NULL oraz problem dublowania kolumn.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

@Entity

A

Oznacza klasę jako encję, co sprawia, że jest mapowana do tabeli w bazie danych.
Klasy oznaczone tą adnotacją mogą być używane w operacjach CRUD za pomocą sesji Hibernate.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

@Table

A

Umożliwia określenie nazwy tabeli i innych opcji tabeli dla mapowanej encji. Jeśli nie jest używana, nazwa klasy zostanie użyta jako nazwa tabeli.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

@JoinTable

A

Określa tabelę łączącą w relacji wiele-do-wielu. Można w niej określić nazwę tabeli, kolumny łączące itp.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

@JoinColumn

A

Określa nazwę kolumny, której używa się do łączenia w relacjach.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

@Transient

A

Oznacza, że dane pole nie powinno być utrwalane ani mapowane do bazy danych.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

@GeneratedValue

A

Określa strategię generowania wartości dla klucza głównego.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

Strategia Squence

A

Strategia SEQUENCE używa sekwencji bazy danych do generowania kluczy głównych.
Wymaga określenia nazwy sekwencji. Jest to popularne podejście w bazach danych takich jak Oracle.

@Id
**@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "my_seq_gen")
@SequenceGenerator(name = "my_seq_gen", sequenceName = "MY_SEQ")**
private Long id;
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

Strategia Identity

A

Strategia IDENTITY polega na pozostawieniu generowania klucza głównego bazie danych, która używa kolumny autoinkrementacyjnej.
Jest to popularne w bazach danych takich jak MySQL czy MS SQL Server.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

Strategia table

A

Strategia TABLE polega na używaniu oddzielnej tabeli w bazie danych do przechowywania wartości klucza głównego dla każdej encji.
Tabela zawiera wartość klucza, który ma być użyty następnie.

@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "table_gen")
@TableGenerator(name = "table_gen", table = "ID_GEN_TABLE", pkColumnName = "GEN_NAME", valueColumnName = "GEN_VAL", pkColumnValue = "NEXT_ID", allocationSize = 1)
private Long id;
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
Q

Co to jest HQL?

A
  • HQL (Hibernate Query Language) zapytań specyficzny dla Hibernate.
  • operuje on na obiektach i ich właściwościach zamiast bezpośrednio na tabelach i kolumnach baz danych.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
26
Q

Jakie są główne cechy HQL?

A
  1. Operuje na obiektach, nie tabelach.
    Jest niezależny od konkretnej bazy danych.
  2. Obsługuje zaawansowane funkcje, takie jak stronicowanie i joiny.
  3. Obsługuje parametryzowane zapytania.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
27
Q

Jak w HQL odwołuje się do obiektów i ich właściwości?

A

W HQL odwołania kierowane są do nazw klas (np. “FROM Student”) i ich właściwości (np. “s.age > 18”), a nie bezpośrednio do nazw tabel i kolumn baz danych

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
28
Q

Co to jest “transient” w kontekście cyklu życia encji w Hibernate?

A
  • obiekt został stworzony, ale nie jest jeszcze skojarzony z sesją Hibernate
  • nie ma reprezentacji w bazie danych.
  • Jest to początkowy stan obiektu.
  • jeśli nie zapiszemy to utracimy
  • gdy aplikacja przestanie się odwoływać bedzie garbage collected
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
29
Q

Co oznacza stan “persistent” encji w Hibernate?

A
  • obiekt jest skojarzony z sesją Hibernate
  • jest bazie danych
    -Wszelkie zmiany w obiekcie będą automatycznie zsynchronizowane z bazą danych, o ile sesja jest otwarta.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
30
Q

Jakie jest znaczenie stanu “detached” dla encji w Hibernate?

A
  • obiekt był wcześniej skojarzony z sesją Hibernate (był w stanie “persistent”), ale sesja została zamknięta. (kontekt utrwalania)
  • Obiekt nadal ma identyfikator i może być ponownie załączony do nowej sesji.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
31
Q

Jak przenieść encję z stanu “detached” do “persistent”?

A

można użyć metod takich jak **merge()

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
32
Q

Co się dzieje z encją w stanie “persistent”, gdy sesja Hibernate jest zamykana?

A
  • , obiekt przechodzi ze stanu “persistent” do stanu “detached
  • modyfikowany w trakcie życia sesji, te zmiany są zapisywane w bazie danych przed zamknięciem
  • Po zamknięciu sesji obiekt w stanie “detached” nadal może być używany, modyfikowany itp. w kodzie aplikacji. Jednakże wszelkie zmiany dokonane w obiekcie w stanie “detached” nie będą miały wpływu na bazę danych, chyba że obiekt ten zostanie ponownie dołączony do nowej sesji (na przykład poprzez użycie metody merge()).
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
33
Q

Co to jest problem N+1 w kontekście ORM?

A
  • ORM wykonuje zbyt wiele zapytań do bazy danych podczas ładowania powiązanych obiektów.

Dla jednego głównego zapytania do bazy danych (1) oraz dodatkowych zapytań dla każdego powiązanego obiektu (N), łącznie wykonuje się N+1 zapytań.
- Jest to nieefektywne i może prowadzić do spowolnień w aplikacji.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
34
Q

Jak rozwiązać problem N+1 w Hibernate?

A
  1. UżywanieJOIN FETCH w HQL lub kryteriach zapytania.
  2. Ustawienie strategii ładowania na EAGER dla powiązanych obiektów (chociaż to może prowadzić do innych problemów z wydajnością, jeśli nie jest używane ostrożnie).
  3. Używanie BatchSize do określenia liczby obiektów ładowanych w jednym zapytaniu.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
35
Q

Przykład N + 1

A

Jeśli zapytamy o listę użytkowników i dla każdego z nich zapytamy o jego adresy, pojawi się problem N+1.

Jeśli mamy 50 użytkowników w bazie danych, powyższy kod spowoduje wykonanie 51 zapytań do bazy danych:

  1. Zapytanie, żeby pobrać wszystkich użytkowników (from User).
  2. Dla każdego użytkownika zostanie wykonane oddzielne zapytanie, aby pobrać jego adresy.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
36
Q

Fetch Type: Eager

A
  • Gdy encja jest ładowana, wszystkie jej powiązane obiekty są ładowane jednocześnie,
  • niezależnie od tego, czy są one bezpośrednio używane w danym momencie czy nie.
  • hibernate generuje joina
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
37
Q

Wady i zalety Eager

A

Zalety:
Unikanie problemu N+1 w określonych przypadkach.
Dane są od razu dostępne bez konieczności dodatkowego ładowania.

Wady:
Może prowadzić do nadmiernego ładowania danych, które nie są potrzebne, co wpływa na wydajność.
Jeśli dane są zawsze ładowane, nawet gdy nie są potrzebne, może to prowadzić do niepotrzebnego obciążenia systemu.
- problem iloczynu kartezjanskiego

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
38
Q

Fetch Type: Lazy

A
  • Gdy encja jest ładowana, jej powiązane obiekty nie są ładowane od razu.
  • Zamiast tego są one ładowane dopiero wtedy, gdy są bezpośrednio odwoływane lub używane.
  • hibernate robi dodatkowego selecta
39
Q

Zalety i wady Lazy

A

Zalety:

Oszczędność zasobów przez unikanie ładowania niepotrzebnych danych.
Poprawa wydajności, ponieważ dane są ładowane na żądanie.

Wady:

Możliwość napotkania problemu N+1, jeśli nie jest właściwie zarządzany.
Potrzeba aktywnej sesji Hibernate do ładowania leniwych obiektów. Jeśli sesja zostanie zamknięta, próba dostępu do niezaładowanego obiektu spowoduje wyjątek LazyInitializationException.

40
Q

LazyInitializationException

A

Wyjątek rzucany przez Hibernate, gdy aplikacja próbuje uzyskać dostęp do obiektu zainicjowanego do ładowania leniwego po zamknięciu sesji.

41
Q

Relacja OneToOne

A

Relacja OneToOne

42
Q

Relacja OneToMany / ManyToOne

A

Relacja między dwoma encjami, gdzie jedna encja może być powiązana z wieloma innymi encjami.

43
Q

Relacja ManyToMany

A

Relacja między dwoma encjami, w której wiele encji z jednej strony może być powiązane z wieloma encjami z drugiej strony.

44
Q

Czym jest transkacja

A
  • Transakcja to sekwencja operacji wykonywanych jako jedna jednostka pracy.
  • Jeśli wszystkie operacje są udane, transakcja jest zatwierdzana (commit), co oznacza, że wszystkie zmiany wprowadzone podczas transakcji są trwale zapisywane.
  • Jeśli jedna z operacji nie powiedzie się, cała transakcja jest wycofywana (rollback), co oznacza, że żadna z operacji nie zostaje zapisana.
45
Q

4 własności transkacji ACID

A

A (Atomicity): Wszystkie operacje w transakcji są traktowane jako jedna atomowa jednostka pracy. Albo wszystkie się udają, albo żadna nie zostaje zrealizowana.
C (Consistency): Baza danych przechodzi z jednego spójnego stanu do drugiego po zakończeniu transakcji.
I (Isolation): Operacje jednej transakcji są izolowane od innych transakcji. Dwie jednoczesne transakcje nie wpływają na siebie nawzajem.
D (Durability): Po zatwierdzeniu transakcji, jej efekty stają się trwałe i nie mogą być usunięte w przypadku awarii systemu.

46
Q

Jakie wymagania musi spełniać klasa która jest encja ?

A

Adnotacja @Entity:

publiczny lub chroniony konstruktor bez
argumentowy
:

nie może byc final

żadne pole ani metoda nie może być final

Identyfikator (ID):

Gettery i Settery:

47
Q

Entity Manager w Hibernate

A
  • Entity Manager to interfejs w JPA (Java Persistence API), który dostarcza zestaw operacji CRUD (create, read, update, delete) oraz innych funkcji zarządzania cyklem życia encji.
  • Umożliwia również tworzenie zapytań, zarządzanie transakcjami i wiele innych funkcji związanych z persystencją danych.
48
Q

Named Queries w Hibernate / JPA

A
  • Named Queries, czyli nazwane zapytania, to zapytania, które są definiowane w encji (lub mapie) i są przypisywane do unikalnych nazw.
  • Są one sprawdzane pod kątem poprawności składni w momencie uruchamiania aplikacji, co sprawia, że są bardziej wydajne niż dynamicznie tworzone zapytania, ponieważ są kompilowane tylko raz.
49
Q

Zalety named queries

A
  1. Optymalizacja: Zapytanie jest kompilowane raz przy uruchamianiu aplikacji.
  2. Czytelność: Można centralnie zarządzać zapytaniami w encjach, co ułatwia śledzenie.
  3. Bezpieczeństwo: Zmniejsza ryzyko ataków typu SQL Injection.
50
Q

JPQL

A
  • język zapytań podobny do SQLa
  • służy do wykonywania operacji na bazie danych
  • ma składnie opartą na SQLu
51
Q

Natywne metody Hibernate

A
  • find
  • save
  • update
  • delete
52
Q

JPA

A

Java Persistence API
- api służace do utrwalania danych w relacyjnych bazach danych
- pozwala uniezależnić się od ORMA

53
Q

Jak pobrać encje przy użyciu Hibernate

A
54
Q

Jak wygląda mapowanie relacji one-to-many jednostronnie ?

A
  • wystarczy Lista w encji właściciela relacji
  • JoinColumn
  • postronie drugiej nic nie trzeba dodawać
55
Q

Jak wygląda mapowanie relacji one-to-many dwustronne ?

A
  • trzeba pamiętać , że nie ma JOIN COLUMN
  • po drugiej stronie realcji Fetch type Eager
56
Q

Fetch Type Many-to-One

A

Eager

57
Q

Fetych type one-to-many

A

Lazy

58
Q

Many-to-Many Encja Product z Attributes

A
59
Q

Entity Manager vs Session

A

Session jest specyficzny dla Hibernate i nie jest przeznaczony jako standard dla różnych narzędzi ORM.
EntityManager jest interfejsem JPA i jest zaprojektowany tak, aby mógł być implementowany przez dowolne narzędzie ORM, które przestrzega specyfikacji JPA (Hibernate może być jedną z takich implementacji, ponieważ zapewnia implementację JPA).

60
Q

Jak rozwiązać problem iloczynu kartezjańskiego

A
  • Dtos
  • Distinct
  • -lazy loading
61
Q

Problem iloczynu kartezjanskiego

A
  • załóżmy , że mamy encje Book i Author
  • gdzię autor może mieć wiele ksiązek
  • wykonujemy zapytanie JPQL
    String jpql = "SELECT a FROM Author a JOIN a.books b";
  • zapytanie do spowoduje, że auto pojawi się w wyniku tyle razy ile ma ksiązek
  • rozwiązanie
    ~~~
    String jpql = “SELECT DISTINCT a FROM Author a JOIN FETCH a.books b”;
    ~~~

oraz LazyLoading

62
Q

FetchMode

A
  • określa jak w relacji pobrać powiązane encje
  • @Fetch
63
Q

FetchMode Select

A
  • domyślny
  • każda powiązana encja jest pobierane przez dodatkowego selecta
64
Q

FetchMode JOIN

A
  • generowane jest jedno zapytanie, które zawiera złaczenie tabeli
65
Q

Fetch SUBSELECT

A
  • generuje SUBSELECTA
  • WHERE IN
66
Q

Do czego służy Entity Graph

A
  • pozwala na określeniu zestawu atrybutów necji, które mają być załadowane z bazy danych w określonej operacji
  • celem jest zapewnienie więszkej kontrolii na operacjami ładowania Eager i Lazy
67
Q

Przykład Entity Graph

A

W powyższym przykładzie, gdy pobierasz autora, chcesz również załadować jego książki (oraz wydawców tych książek) w jednym zapytaniu, aby uniknąć problemu N+1 w dostępie do bazy danych.

68
Q

Czym jest Batching?

A
  • to wykonywanie operacji w grupach
  • często jest to dzielenie dużej ilości operacji na mniejsze grupki
  • W hibernate jest to wysyłanie do bazy danych kilku zapytań tego samego typu w jednej porcji
  • np. wykonanie 100 tys zapyań podzielić na mniejsze batche
  • tyle zapytań w jednej transkacji jest nibezpieczne
  • nie jest właczone domyślnie
  • Id nie możę być Identity
69
Q

Jak wyciścić Sesje Hibernate (Cache możę być out of memory)

A

EntityManger ma dwie metody:
em.flush();
em.clear();

70
Q

Hibernate Stronninowanie wyników na przykładzie update

A
  • Select po BatchReview mógłby spowodwać out of memory
  • nie możemy czyścić Sesji
  • setFirstResult(i)
  • setMaxResult(batchSize)
  • potem em.flush em.clear
71
Q

Batch Strumieniwanie

A
72
Q

OrphanRemoval

A
  • określa czy obiekty potomne, które nia mają odniesienia do obiektów nadrzędnych powinny być usunięte z bazy danych
73
Q

Poziomy Izolacji transkacji

A
  • read uncommited
  • read committed
  • Reapatable read
  • Serializable
74
Q

Read uncommited

A
  • możliwy brudny odczyt,
  • możliwy odczyt nie dający się powtórzyć
  • możliwy odczyt widmo
  • niemożliwy lost update
  • każda transkacja możę odczytać każdy wiersz
  • zapisujące nie dopuszczają innych zapisujących
75
Q

Read commited

A
  • niemożliwy brudny odczyt,
  • możliwy odczyt niedający się powtórzy
  • możliwy odczyt widmo.
  • czytające dopuszczają wszystkie
  • niezatwierdzone piszące blokują wszystkim innym transkacja
  • domyślny poziom izolacji Specyfikacji JPA
76
Q

Repeatable read

A
  • możliwy odczyt widmo.
  • czytające dopuszczają czytające
  • zapisujące niedopuszczają żadnych
77
Q

Serializable

A

żaden z niepożądanych odczytów nie jest możliwy. W praktyce oznacza to zablokowanie dostępu do całej tabeli. Niemożliwa jest modyfikacja i odczyt aż do momentu zakończenia transakcji.
- większość aplikacji nie jest potrzebna
- odczyt widma nie sprawia problemów

78
Q

Budny odczyt

A
  • odczyt zmiany wprowadzonej przez inna transkacje, która nie została jeszcze zatwierdzona
79
Q

odczyty nie dające się powtórzyć

A
  • jedna transakcja czyta element danych dwa razy i za każdym razem odczytuje inny stan
  • inna transakcja mogła zapisać element danych i zatwierdzić dane pomiędzy dwoma odczytami
80
Q

odczyty widmo

A
  • gdy zapytanie transakcji jest uruchamiane dwukrotnie i drugi zestaw wyników zawiera dane, które nie były w pierwszym
  • druga transkacja zrobiła inserta w tym czasie
81
Q

utracona aktualizacja

A
  • gdy dwie transkacje jednocześnie aktualizują element danych a druga transkacja zostanie anulowana
  • w takim przypadku obie zmiany zostaną utracone
82
Q

Jaki poziom izolacji wybrać?

A
  • zbyt wysoki poziom izolacji negatywnie wpływa na skalowalność aplikacji
  • zbyt niski poziom może spowodować może spowodować niedające się powtórzyć błędy
  • należy wyeliminować poziom read uncommited - korzystanie z niezatwierdzonych zmian innej transkacji jest niebezpieczne
  • więkoszość aplikacji niepotrzebuje serializable - więcej problemów z blokowaniem tabeli
  • read commited jest domyślny ponieważ wraz z mechanizmem cachowania eliminuje problem odczytu nie dającego się powtórzyć
83
Q

Optymistic Lock

A
  • technika zarządzania współbieżnością
  • zakłada, że konflikt w bazie są rzadkie i zamiast blokować dostęp do rekordu pozwala na równoległą modyfikacje
  • konflikt jest wykryty i obsłużony przy zapisie
  • realizowana jest przy pomocy wersjonowania rekordów
84
Q

Sposoby wersjonowania

A
  • przez pole licznika wersji oraz @Version (update where And version = )
  • przy pomocy znacznika czasu
  • wersjonowania bez znaczników czasu i wersji , w celu zsychnchronizowania robi Update z where And na każde pole
85
Q

Kontekst utrwalania

A
  • W jpa Entity Manager
  • zarządza wszystkimi encjami w stanie persist
  • automatyczne sprawdzanie modyfikacji wykrywane są te egzemplarze encji które zostały zmodyfikowane
  • spełnia rolę cache pierwszego poziomu - zapamiętuje wszystkie egzemplarze encji przetwarzane w określonej jednostce pracy
  • jak ładujemy jakąś encje to hibernate najpierw sprawdzi kontekts utrwalania
86
Q

Jaki problem może wystąpić jęśli mamy dwie encje w stanie odłączonym które były pobrane w różnych kontekstach utrwalania i nie stworzyliśmy własnych equals oraz hash code

A
  • jeśli były pobrane w różnych kontekstach utrwalania to będą traktowane jako różne pomimo , że odnoszą się do tego samego rekordu w bazie
  • włąsny hashcode i equals rozwiązuje problem
  • klucz bizesowy i porównywanie equals
87
Q

Pobraliśmy egzemplarz klasy User w poprzednim kontekście utrwalania a teraz chemy go zmodyfikować, jak wygląda taka procedura

A
  • najpierw wywołujemy merge - hibernate sprawdza czy trwały egzemplarz w kontekście utrwalania ma taki sam identyfikator co odłączony egzemplarz, który scaliliśmy
  • w tym przykładzie kontekst utrwalania jest pusty więc Hibernate ładuje egzemplarz z tym id z bazy
  • operacja merge kopiuje odłączony egzemplarz encji do załadowanego utrwalonego egzemplarza
  • jeżeli nie było encji z takim id to Hibernate stworzy nowy egzemplarz
  • merge może obługiwać te co są detached oraz transient
88
Q

Pesymistic Lock

A
  • strategia zarządzania współbieżnośćia
  • zakłada, że konflitky w dostępie do danych są prawdopodobne
  • zabezpiecza się przed nimi poprzez zablokowania rekordów na czas wykonania operacji
  • negatywnie wpływa na wydajność aplikacji
89
Q

Rodzaje pesymistic locków

A
  1. Read Locking
    - zapobiega zmianom w blokowanych rekordach przez inne transkacje ale pozwala na ich odczyt
    - stosujemy gdy potrzebujemy, że dane nie zostaną zmienione przez inne transkacje przed zakończeniem operacji ale nie musimy blokować odczytów
  2. Write Locking
    - zapobiega zmiana oraz odczytowi
90
Q

Pesymistic Lock vs Optymistic

A

Optymistic
- konflikt są rządkie
- wersjonowanie rekordów bazie danych, aplikacja sprawdza czy wersja rekordu się nie zmieniła przed zapisem
- konfilkty rozwiązywane na poziomie aplikacji
- minimlany wpływ na wydajność
Pesymistic
- zakłada, że konflikty są prawdopodobne
- bezpośrednie blokowanie rekordów
- negatywy wpływ na wydajność

91
Q

Co jeśli dojdzie do konfiliktu przy optymistic lock

A
  • Hibernate rzuci Optymistic Lock exception
92
Q

Jak zoptymalizować N + 1 używając Fetchmode ?

A
  • Subselect jest dobra alternatywą do pobierania zachłannego
  • gdy dojdzie do operacji na powiązanych kolekcjach hibernate wygeneruje jedno zapytanie subselect aby pobrać wszystkie bidy dla wszystki item jednym zapytaniem
93
Q

Jak rozwiązać problem iloczynu kartenzjanśkiego używając FetchMode

A
  • fetchmode select sprawi, że zamiast zapytania z JOIN, które może doprowiadzić do problemu wykona osobnego selecta
94
Q
A