Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
1
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA
Zbyněk Šlajchrt Část 7.
2
Vazby mezi entitami Podobně jako mezi tabulkami v relačních databázích, tak i mezi entitami v JPA mohou být definovány vazby – relace. Příklady Klient a jeho adresa Klient a jeho účty Učet a transakce Výpis z účtu
3
Typy vazeb One-to-one jednosměrná One-to-one obousměrná
Vztah mezi klientem a jeho adresou One-to-one obousměrná Vztah mezi klientem a jeho poštovní schránkou One-to-many jednosměrná Vztah mezi poštovní schránkou a došlými zprávami One-to-many obousměrná Vztah mezi osobním bankéřem a klienty
4
Typy vazeb Many-to-one jednosměrná Many-to-many jednosměrná
Vztah mezi transakcemi a účtem Many-to-many jednosměrná Vztah mezi výpisem a účty Many-to-many obousměrná Vztah mezi klientem a skupinami klientů (např. rodinní příslušníci)
5
One-to-one jednosměrná
Příklad: vztah mezi klientem a jeho adresou Klient má jednu adresu (pro jednoduchost) Na jedné adrese může bydlet pouze jeden klient (pro jednoduchost) Klient má odkaz na adresu Adresa nemá odkaz na klienta
6
One-to-one jednosměrná
Class diagram Entity-relationship diagram
7
One-to-one jednosměrná
Programovací model v JPA Entita, která odkazuje na druhou entitu definuje vlastnost pro uchování odkazu (+ setter a getter) Odkazovaná entita není touto vazbou dotčena Vlastnost je atribut cascade určuje kaskádovou politiky při CRUD operacích nad odkazující entitou Doprovodná určuje sloupec v tabulce odkazující entity, který udržuje primární klíč odkazované entity (foreign-key)
8
One-to-one jednosměrná
9
One-to-one obousměrná
Např. vztah mezi klientem a jeho poštovní schránkou Klient udržuje odkaz na svoji poštovní schránku Poštovní schránka udržuje odkaz na klienta u poštovní schránky má asi větší smysl udržovat odkaz na majitele (klienta) než z adresy na obyvatele (klienta)
10
One-to-one obousměrná
11
One-to-one obousměrná
Programovací model v JPA Obě entity definují vlastnost pro uchování odkazu na protější entitu (+ getter a setter) Vlastnosti jsou atribut fetch určuje okamžik, kdy se protější entita nahraje LAZY – až v okamžiku první přístupu k odkazované entitě EAGER – při nahrání odkazující entity Lze použít doprovodnou Jedna strana vazby je vždy vlastník vazby Druhá strana musí zadat atribut mappedBy – určuje vlastnost protější entity, která ukazuje na tuto entitu.
12
Problém obousměrných vazeb
V případě obousměrných vazeb se rozlišuje vlastnická strana vztahu (owning side) udržuje perzistentní informaci o vazbě opačná strana vztahu (inverse side) neudržuje perzistentně informaci o vazbě odkazuje se na vlastnost se zpětným odkazem u vlastníka vazby atribut mappedBy název vlastnosti protější entity – vlastníka vazby – ukazující zpět na opačnou stranu vazby Držet se pravidla: nastavit odkazy na obou stranách vazby!
13
One-to-one obousměrná
Vzájemné propojení:
14
One-to-many jednosměrná
Např. vztah mezi poštovní schránkou a došlými zprávami Poštovní schránka udržuje kolekci zpráv, které došly klientovi atribut entity s kolekcí je obvykle typu java.util.List, kde generický parametr je odkazovaná entita - zpráva Zpráva v kolekci neudržuje odkaz na schránku - zbytečné
15
One-to-many jednosměrná
Zpětný ukazatel do tabulky MAILBOX
16
One-to-many jednosměrná
Programovací model v JPA Entita, která odkazuje na více entit, definuje vlastnost typu Collection, List, Set nebo Map (java.util) Prvkem kolekce je odkazovaná entita Vlastnost je lze uvést atributy cascade, fetch a orphanRemoval (JPA 2) orphanRemoval – Odstranění entity z kolekce povede k jejímu úplnému odstranění Doprovodná vlastnosti odkazující entity (1) určuje sloupec na tabulce odkazované entity (N), který ukazuje zpět na odkazující entity – tzv. zpětný ukazatel (jedna z možných implementací)
17
One-to-many jednosměrná
Odstranění odkazu na zprávu z kolekce způsobí odstranění zprávy samotné.
18
One-to-many obousměrná
Např.: vztah mezi osobním bankéřem a klienty Osobní bankéř má na starosti skupinu klientů Klient má přiřazeného právě jednoho osobního bankéře Entita bankéře udržuje kolekci odkazů na klienty Entita klienta udržuje odkaz na bankéře Totožné s obousměrnou vazbou many-to-one věc perspektivy
19
One-to-many obousměrná
20
One-to-many obousměrná
Programovací model v JPA Entita, která odkazuje na více entit, definuje vlastnost typu Collection, List, Set nebo Map (java.util) Prvkem kolekce je odkazovaná entita Vlastnost je atribut mappedBy – určuje vlastnost na protější entitě se zpětným ukazatelem Entita z kolekce definuje vlastnost, která udržuje odkaz na protější entitu. Je vždy vlastníkem vztahu! Vlastnost je @JoinColumn určuje sloupec pro mapování ukazatele I zde platí: vždy je třeba propojit obě strany vazby!
21
One-to-many obousměrná
Vzájemné propojení:
22
Many-to-one jednosměrná
Např.: vztah mezi transakcemi a účtem Transakce mají odkaz na účet, nad kterým byly provedeny Účet sám na transakce nevidí má trvanlivější charakter než transakce Transakce udržuje vlastnost ukazující na účet Účtu se tato vazba netýká
23
Many-to-one jednosměrná
24
Many-to-one jednosměrná
Programovací model v JPA Odkazující entita (many) definuje vlastnost ukazující na cílovou entitu (one) Vlastnost je lze nastavit atributy fetch, cascade Lze pro konfiguraci mapování ukazatele na sloupec v tabulce entity
25
Many-to-one jednosměrná
Získání seznamu transakcí nad vybraným účtem:
26
Many-to-many jednosměrná
Např. vztah mezi výpisy a účty Výpis se může vztahovat k několika účtům Účet může figurovat na více výpisech Účet není touto vazbou nikterak dotčen nevidí na výpisy Výpis definuje vlastnost udržující seznam účtů, pro které je sestaven
27
Many-to-many jednosměrná
28
Many-to-many jednosměrná
Programovací model v JPA Odkazující entita definuje vlastnost, která udržuje kolekci odkazů na protějšky Vlastnost je Doprovodná mapovací definuje mapování pomocí vazební tabulky name – název vazební tabulky joinColumns – sloupec (sloupce) s PK odkazující entity inverseJoinColumns – sloupec (sloupce) s PK odkazované entity Protější entity se tato vazba přímo netýká
29
Many-to-many jednosměrná
30
Many-to-many obousměrná
Např.: vztah mezi klientem a skupinami klientů (např. rodinní příslušníci) Klient může patřit do více skupin Skupina obsahuje 0-N klientů Klient vidí na seznam skupin, ve kterých je členem Entita skupiny udržuje seznam svých členů
31
Many-to-many obousměrná
32
Many-to-many obousměrná
Programovací model v JPA Obě entity definují vlastnost udržující kolekci protějších entit Vlastnost je Lze použít doprovodnou mapovací Jedna strana musí uvést v atribut mappedBy Protějšek této entity se pak stává vlastníkem vazby Znovu je třeba držet se pravidla, že úpravy vazby se provádí na obou stranách
33
Many-to-many obousměrná
Vzájemné propojení:
34
Použití mapy jako kolekci vazeb
java.util.Map lze také použít jako kolekci pro udržování vazeb mezi entitami Klíč v mapě je mapován na vlastnost odkazované entity specifikuje vlastnost entity, která se použije jako klíč pokud se neuvede, klíčem se rozumí PK entity
35
Použití mapy jako kolekci vazeb
36
Seřazení kolekce vazeb
Při sestavování kolekce z databáze lze určit, zda a jak má být výsledná kolekce setříděna definuje seznam vlastností, podle kterých bude kolekce setříděna Název vlastnosti lze doplnit příznakem asc nebo desc, který určuje, zda se bude podle uvedené vlastnosti setřídit vzestupně či sestupně
37
Perzistentní seřazení
Od verze JPA 2 lze deklarovat, že seřazení entit v kolekci má být perzistentní ovlivňuje dotaz do databáze v okamžiku sestavování kolekce Informace o seřazení kolekce je uchovávána ve speciálním sloupci v tabulce odkazující entity slouží ke specifikování tohoto sloupce
38
Perzistentní seřazení
39
Perzistentní seřazení
40
Odpojené entity a vazby
V případě, že je entita odpojená, tj. není v kontextu perzistence, může nastat, že některé vlastnosti nebudou nastaveny Týká se vlastností, které mají příznak FetchType.LAZY Platí to i pro vazby Specifikace neříká, jak se má implementace zachovat při přístupu k nenastavené vlastnosti Obvykle se to řeší vyhazováním specifické výjimky Nahrát LAZY vlastnost entity lze Zavoláním getter metody vlastnosti Použitím JPQL operace FETCH JOIN (v další přednášce)
41
Kaskádová pravidla Operace manažera entit manipulující s entitou se mohou týkat i asociovaných entit Pomocí kaskádových pravidel lze určit vazby, po kterých se budou vyjmenované operace šířit k dalším entitám mají atribut cascade Určuje, jaké operace se budou šířit po vazbě k cílové entitě Hodnota z výčtového typu CascadeType
42
CascadeType PERSIST MERGE REMOVE REFRESH ALL
Pokud vytvářená entita odkazuje na jinou, která ještě nebyla vytvořena, bude také vytvořena. MERGE Pokud připojovaná entita odkazuje na jinou entitu, bude také připojena. Nově asociované entity budou vytvořeny. REMOVE Pokud odstraňovaná entita odkazuje na jinou, bude také odstraněna REFRESH Propaguje obnovení stavu entity na asociované entity ALL
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.