Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA Zbyněk Šlajchrt Část 7.

Podobné prezentace


Prezentace na téma: "VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA Zbyněk Šlajchrt Část 7."— Transkript prezentace:

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 2

3 Typy vazeb  One-to-one jednosmě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 3

4 Typy vazeb  Many-to-one 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) 4

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 5

6 One-to-one jednosměrná Entity-relationship diagram Class diagram 6

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

8 One-to-one jednosměrná 8

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) 9

10 One-to-one obousměrná 10

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. 11

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! 12

13 One-to-one obousměrná Vzájemné propojení: 13

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é 14

15 One-to-many jednosměrná Zpětný ukazatel do tabulky MAILBOX 15

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í) 16

17 One-to-many jednosměrná Odstranění odkazu na zprávu z kolekce způsobí odstranění zprávy samotné. 17

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 18

19 One-to-many obousměrná 19

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 určuje sloupec pro mapování ukazatele  I zde platí: vždy je třeba propojit obě strany vazby! 20

21 One-to-many obousměrná Vzájemné propojení: 21

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á 22

23 Many-to-one jednosměrná 23

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 24

25 Many-to-one jednosměrná Získání seznamu transakcí nad vybraným účtem: 25

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 26

27 Many-to-many jednosměrná 27

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á 28

29 Many-to-many jednosměrná 29

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ů 30

31 Many-to-many obousměrná 31

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 32

33 Many-to-many obousměrná Vzájemné propojení: 33

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 34

35 Použití mapy jako kolekci vazeb 35

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ě 36

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 37

38 Perzistentní seřazení 38

39 Perzistentní seřazení 39

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) 40

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 41

42 CascadeType  PERSIST 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 42


Stáhnout ppt "VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA Zbyněk Šlajchrt Část 7."

Podobné prezentace


Reklamy Google