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

Slides:



Advertisements
Podobné prezentace
OZD: Hašování RNDr. Michal Žemlička.
Advertisements

© 2000 VEMA počítače a projektování spol. s r. o..
(instance konkrétní třídy)
Tabulky v MS ACCESS Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Mgr. Jiří Novák.
Ing. Jan Mittner MySQL Workbench 2. Základy práce s databází 3. Subversion 2.
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA
Základy databázových systémů
A5M33IZS – Informační a znalostní systémy Dotazovací jazyk SQL - I.
Přednáška č. 3 Normalizace dat, Datová a funkční analýza
Aplikační a programové vybavení
Microsoft Office Access
 Informací se data a vztahy mezi nimi stávají vhodnou interpretací pro uživatele, která odhaluje uspořádání, vztahy, tendence a trendy  Existuje celá.
Ing. Jan Mittner Rozšíření modelu 2. Vazba 1:n 3. Vazba m:n 2.
Databázové systémy Přednáška č. 2 Proces návrhu databáze.
Přednáška č. 5 Proces návrhu databáze
Fakulta elektrotechniky a informatiky
ÚVOD DO CPP 7 Dědičnost - pokračování
C# pro začátečníky Mgr. Jaromír Osčádal
Architektury a techniky DS Tvorba efektivních příkazů I Přednáška č. 3 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
SQL Lukáš Masopust Historie  Předchůdcem databází byly papírové kartotéky  děrný štítek  1959 konference  1960 – vytvořen jazyk COBOL.
SQL Lukáš Masopust Historie  Předchůdcem databází byly papírové kartotéky  děrný štítek  1959 konference  1960 – vytvořen jazyk COBOL.
Úvod do databází Databáze.
Databáze Jiří Kalousek.
MySQL - Vytvoření nové tabulky  create table jméno_tabulky (jméno_položky typ_položky,... ) Přehled nejběžnějších datových typů Přehled nejběžnějších.
State. State – kontext a problém Kontext  chování objektu má záviset na jeho stavu, který se typicky mění za běhu Neflexibilní řešení  metody obsahují.
Databázové systémy Štěpán Šípal.
Páté cvičení Dědičnost Interface Abstarktní třídy a metody
Databázové systémy II Přednáška č. 8 – Pohledy (Views)
D ATOVÉ MODELY Ing. Jiří Šilhán. D ATABÁZOVÉ SYSTÉMY Patří vedle textových editorů a tabulkových kalkulátorů k nejrozšířenějším představitelům programového.
Objektové programování
Relační databáze.
Konceptuální návrh databáze
Metainformační systém založený na XML Autor: Josef Mikloš Vedoucí práce: Ing. Jan Růžička, Ph.D. V/2004.
KIV/ZIS cvičení 6 Tomáš Potužák. Pokračování SQL Klauzule GROUP BY a dotazy nad více tabulkami Stáhnout soubor studenti_dotazy_sql.mdb.
Informatika pro ekonomy II přednáška 10
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA Zbyněk Šlajchrt Část 4.
B. Miniberger, BIVŠ Praha 2009
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA Zbyněk Šlajchrt Část 13.
2 Ing. Jan Keprt Centrální správa uživatelů 3 Jak to bylo dosud Bylo třeba nastavení uživatelů provést zvlášť, v každém modulu samostatně. Uživatel si.
Databázové systémy I Cvičení č. 8 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
Architektury a techniky DS Cvičení č. 9 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Transakční zpracování v SQL P. Částek. Transakce Transakce = logická jednotka práce Podaří-li se všechny části transakce, potvrdíme je. COMMIT Jestliže.
DATABÁZOVÉ SYSTÉMY. 2 DATABÁZOVÝ SYSTÉM SYSTÉM ŘÍZENÍ BÁZE DAT (SŘBD) PROGRAM KTERÝ ORGANIZUJE A UDRŽUJE NASHROMÁŽDĚNÉ INFORMACE DATABÁZOVÁ APLIKACE PROGRAM.
Konceptuální návrh databáze
Databázové modelování
Aplikační a programové vybavení
Databázové systémy Informatika pro ekonomy, př. 18.
Obchodní akademie, Ostrava-Poruba, příspěvková organizace Vzdělávací materiál/DUM VY_32_INOVACE_01B13 Autor Ing. Jiří Kalousek Období vytvoření březen.
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA Zbyněk Šlajchrt Část 8.
Správní a dopravně správní evidence - IISSDE RNDr. Jiří Malátek Zástupce ředitele OIVS MV
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
Databázové systémy Přednáška č. 5 Datové typy a Fyzická organizace dat.
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ Zbyněk Šlajchrt Část 6.
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ Zbyněk Šlajchrt Část 7.
Databázové systémy I Cvičení č. 8 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2015.
Perzistence XML dat Kamil Toman
Úvod do databází zkrácená verze.
Objektově relační mapování - ORM. Obsah Co je to ORM Využití ORM Dědičnost –jednoduchý příklad –metody jak dědičnost popsat pomocí relační databáze Vztahy.
● Databaze je soubor dat,slouží pro popis reálného světa(např.evidence čkolní knihovny..) ● Relační databaze je databáze založená na relačním modelu.
YOUR LOGO C# Entity Framework. YOUR LOGO  Entity framework nám poskytuje: -Vytváří objektový model na základě databázového schématu -Mapuje tabulky,
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ Zbyněk Šlajchrt Část 5.
Databáze ● úložiště dat s definovaným přístupem ● typy struktury – strom, sekvence, tabulka ● sestává z uspořádaných záznamů ● databáze – struktura – záznam.
Databáze MS ACCESS 2010.
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - CVIČENÍ
Návrhový vzor Flyweight
Informatika pro ekonomy přednáška 8
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA
VÝVOJ PODNIKOVÝCH APLIKACÍ NA PLATFORMĚ JAVA - PŘEDNÁŠKA
Přednáška 9 Triggery.
Transkript prezentace:

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

Perzistentní vrstva Prezentační vrstva "Jak aplikace vypadá" Prezentační vrstva "Jak aplikace vypadá" Business vrstva "Co aplikace dělá" Business vrstva "Co aplikace dělá" Perzistentní vrstva "Co aplikace je" Perzistentní vrstva "Co aplikace je" Servlety JSP Filtry Bezstavové EJB Beans Stavové EJB Beany Message Driven Beany JPA Entity JMS Fronty JMS Topiky

Entita  Perzistentní doménový objekt (PDO)  Objekt Atributy, metody, dědičnost...  Doménový Doménou rozumíme oblast, pro kterou je aplikace navržena Doménový objekt modeluje jsoucno z domény aplikace Faktura, objednávka, zboží, zákazník - z domény e-business Kniha, výpůjčka, čtenář, upomínka - z domény knihovnictví  Perzistentní Modelované jsoucno má trvalý charakter Data jsou uložena v úložišti, které je schopné uchovávat data 'libovolně' dlouho

Entita v EJB3 (JPA)  POJO (Plain Old Java Object)  Lze vytvářet pomocí new operátoru  Testovatelné  Atributy třídy entity představují  sloupce v databázi  vazby na jiné entity  Operace (business logika) nad entitou by měly být vyjádřeny jako metody třídy entity  Anti-vzor Anemic Entity (Fowler) - nedochůdče  Nikoliv za každou cenu – pokud operace obnáší interakce mezi více entitami, lépe řešit např. session EJB

Entita - příklad

Kontext perzistence  Promítání a načítání stavu entity z databáze je možné pouze pokud se entita nachází v kontextu perzistence (Persistence Context) – připojená entita (attached)  Mimo tento kontext je entita prostým objektem bez vazby na úložiště – odpojená entita (detached)  V kontextu jsou sledovány změny stavu entity  stav je synchronizován se stavem v db  synchronizace může být vyvolána explicitně či implicitně má na starosti objekt EntityManager  při uzavírání kontextu se všechny entity odpojí

Transakční kontext perzistence  Doba života tohoto kontextu je pouze po dobu trvání transakce  často v rámci volání jedné metody klientem  V okamžiku ukončení transakce se uzavře i kontext  všechny entity v kontextu se odpojí  pouze pokud transakce proběhne v pořádku (commit), změny v entitách se synchronizují z databází  Poznámka: platí pouze pro kontext řízený aplikačním serverem je možné vytvářet si vlastní kontext perzistence

Rozšířený kontext perzistence  Doba života tohoto kontextu není svázána s trváním transakce  Všechny entity v kontextu zůstávají připojeny i když je transakce ukončena  Velmi užitečné v případech, kdy chceme provádět delší konverzace s databází a zároveň se vyhnout dlouhým transakcím  dlouhé transakce blokují "vzácné" prostředky systému JDBC připojení, zámky

Rozšířený kontext - pseudokód

Entita coby přenosový objekt (TO)  Odpojenou entitu lze použít jako přenosový objekt  lze ji serializovat a poslat na klienta  klient může provést úpravy a odeslat ji zpět na server  na serveru se musí provést tzv. merge sloučení s verzí entity v kontextu (pokud v něm není, načte se)  vzor Transfer (Value) Object  V případě složitějších entit může být problematické  přenášení celého grafu závislých entit může brzdit síť  řešení: závislosti lze dohrávat dynamicky (lazy) nevýhoda – v různých situacích je na klientovi entita s různě připojenými závislými entitami (NullPointerException)

Životní cyklus entity Existuje v paměti Připojená Odpojená Odstraněná Neexistuje garbage collector odstranění z databáze odstranění - obnova stavu (refresh) - aktualizace stavu settery merge - vyčištění na kontextu - serializace instanciace - volání persist na EM - výsledek dotazu

Callback metody na entitách  Během životního cyklu entity dochází ke generování událostí  Tyto události lze odchytávat přímo v entitě prostřednictvím tzv. callback metod  Události  vkládání (persisting)  aktualizace (updating)  mazání (deleting)  výběr (selecting)  Všechny události mají Pre a Post callback metody výjimkou je výběr, který má pouze Post callback 12

Životní cyklus a callback metody 13 Existuje v paměti Připojená Odpojená Odstraněná Neexistuje @PreUpdate když jsou volány když se provádí když se nahrává entita před a po volání UPDATE na databázi. Tj. pouze pokud je find() nebo

Callback metody - seznam 14 AnotacePopis označené se před vlastním provedením se po uložení entity do databáze. Primární klíč je vygenerován a nastaven do svého se před UPDATE operací. Důsledek volání setterů nebo se po provedení operace UPDATE nad se před vlastním provedením se po smazání entity z se po nahrání stavu z databáze do instance entity. Důsledek EntityManager::find, refresh a JPQL. signatura: void nazevMetody()

Posluchači entit  Zpracování událostí v životním cyklu entit lze separovat do speciálních komponent – posluchačů  Vhodné, když se logika v callback metodách přímo nedotýká entity  Posluchač je POJO s metodami označenými anotacemi z tabulky na stránce 5  Signatura metody: void nazevMetody(Entita e)  Posluchači se nasadí na třídu entity pomocí anotace 15

Posluchač PhotoLogger 16

Konfigurace posluchače 17 Pomocí Alternativně v orm.xml. Vhodné pro ladění.

Generický posluchač entit  Není vázán na jediný typ entity  Obdobné předchozímu typu posluchače  Rozdíl v typu parametru callback metod  java.lang.Object  Lze registrovat jako tzv. default entity listener  poslouchá na všech entitách  možno pouze v orm.xml 18

Jednotka perzistence  Každá entita patří aspoň do jedné tzv. jednotky perzistence  Lze definovat více jednotek perzistence  Každá pracuje s právě jedním datovým zdrojem  Entity lze přiřadit k jednotce explicitně či implicitně  Implicitní zařazení entity JPA provider skenuje JAR soubor a zkoumá na třídách  Explicitní Entity lze pro každou jednotku vyjmenovat v souboru META- INF/persistence.xml

Soubor persistence.xml  Obsahuje konfigurace jednotek perzistence v modulu  Modul může být obyčejný JAR nebo EJB-JAR  Umístění v META-INF adresáři modulu  JAR modul může být umístěn  na classpath běžného Java SE programu  WEB-INF/lib  v kořenovém adresáři enterprise archivu (.ear)  v lib adresáři enterprise archivu  EJB-JAR se skenuje při umístění EAR na server

persistence.xml - příklad Explicitní vyjmenování entit patřících do jednotky BankTest Implicitní zařazení entit, tj. skenování JAR souboru

Získání kontextu perzistence  Nejsnadněji pomocí injektáže  Kontejner podává transakční perzistentní kontext  Pro rozšířený kontext je třeba nastavit atribut type anotace na hodnotu EXTENDED  Kontext lze získat také přes EntityManagerFactory

Poznámky k získávání kontextu  Doporučuje se používat injektáž vymyšleno pro zjednodušení práce nemusíme se starat o zavírání kontext nesmí se volat close()  Pokud se použije EntityManagerFactory programátor musí dbát na uzavírání získaného kontextu voláním metody close() v prostředí Java SE se objekt továrny získá voláním statické metody createEntityManagerFactory na třídě javax.persistence.Persistence v Java EE injektáží do atributu

Práce s objektem EntityManager  Ukládání  Vyhledávání  Aktualizace stavu  Slučování  Odstraňování  Obnova stavu  Uzamykání (v další přednášce)

Ukládání entit  Vkládání stavu entity do databáze  Předpoklad, že entita doposud v databázi není Vytvoří se nový objekt entity Nastaví se její vlastnosti a relace Zavolá se metoda EntityManager::persist(entita)  Po vložení se entita stává připojenou ke kontextu  Pokud má entita relace s jinými entitami, může systém vytvořit jejich reprezentaci v databázi společně s hlavní entitou Kaskádová politika musí být PERSIST

Ukládání entit  Při volání persist může být vložení do db (SQL INSERT) odloženo  Pokud dojde k ukládání v rámci transakce, vložení může být provedeno okamžitě, nebo na konci transakce ovládáno tzv. flush modem: setFlushMode(AUTO|COMMIT)  Mimo transakci lze vkládat pouze pokud je kontext perzistence rozšířený Vlastní vložení je odloženo dokud se kontext nepřipojí k transakci EntityManager::joinTransaction() injektovaný rozšířený kontext se připojuje automaticky

Vyhledávání entit  Dva způsoby  podle primárního klíče  vytvořením a provedením dotazu  Vyhledání podle primárního klíče – 2 metody  find(Class entityClass, Objekt key) snaží se vyhledat entitu podle zadaného primárního klíče pro číselné typy funguje autoboxing inicializuje vlastnosti entity podle lazy-loading politiky  getReference(Class entityClass, Objekt key) vrací objekt třídy T, ale pokud entita neexistuje, při prvním přístupu k objektu se vyhazuje EntityNotFoundException tato výjimka se může vyhazovat již při volání getReference

Vyhledání entity dotazem  Vyhledání možné pomocí JPQL dotazu  EntityManager nabízí tři typy metod pro vytváření dotazu  createQuery sestrojí dotaz v syntaxi JPQL, který je předán jako parametr  createNamedQuery sestrojí dotaz podle připraveného výrazu v orm.xml  createNativeQuery sestrojí dotaz v nativní syntaxi SQL  V EJB 3.1 (JPA 2) nový nástroj: Criteria API  vhodné pro sestavování dotazů za běhu programu

Aktualizace entit  V době, kdy je entita připojená ke kontextu, lze na ní provádět úpravy  Operace, které vracejí připojené entity persist, find, getReference, vyhledání dotazem  Ukládání do úložiště (SQL UPDATE) může být prováděno automaticky (v závislosti na flush-mode)  Lze uložit explicitně voláním EntityManager::flush()

Slučování entit (merge)  Metoda EntityManager::merge(entita)  Slučování odpojených entit s kontextem  Pokud entita ještě není v kontextu, je vytvořena plná kopie, která se připojí ke kontextu.  Pokud se již v kontextu nachází entita se stejným primárním klíčem, nahradí se její stav za stav odpojené entity  V obou případech metoda merge vrací připojenou entitu  Je-li kontext rozšířený, lze volat merge i mimo transakci

Odstraňování entit  Metoda EntityManager::remove(entita)  Tato metoda nemusí okamžitě vyústit v odstranění entity z databáze (tj. SQL DELETE)  chování se odvíjí od nastavení flush-mode  Po volání remove je entita odpojena od kontextu  Má-li entita nějaké relace, mohou být také odstraněny v závislosti na kaskádové politice  Je-li kontext rozšířený, lze volat remove i mimo transakci

Obnova stavu entity  Metoda EntityManager::refresh(entita)  V případě, že si nejsme jisti aktuálností stavu připojené entity, lze zavolat refresh(entita)  Přepíše všechny provedené změny stavem z db  Má-li entita nějaké relace, jejich stav může být také obnoven v závislosti na kaskádové politice  Je-li kontext rozšířený, lze volat refresh i mimo transakci

Metody contains a clear  Metoda contains(entita) vrací true, pokud kontext perzistence obsahuje entitu předanou jako parametr  Metoda clear() odpojí všechny entity momentálně připojené ke kontextu

Metoda flush  Entity manager rozhoduje, kdy se změny způsobené voláním persist, merge a remove promítnou do databáze  Synchronizaci lze prosadit voláním flush()  Provádí se automaticky před voláním dotazu, který souvisí se změnami v kontextu  neúčinné implementace mohou provádět flush před každým dotazem  výjimkou je find, jelikož hledání podle primárního klíč nemůže být ovlivněno změnami v kontextu

FlushModeType  Chování entity manageru lze ohledně synchronizace s databází řídit použitím výčtového typu FlushModeType  AUTO přednastavené chování, odpovídá popisu z předešlé stránky  COMMIT změny jsou synchronizovány v okamžiku ukončení transakce (commit) synchronizace neprobíhá ani před dotazy používá se pro zvýšení výkonnosti (batch updates)  Nastavuje se metodou setFlushMode(mode) na EM

Mapování perzistentních objektů  Párování tříd na tabulky, atributů entity na sloupce a relace v databázi, generování prim. klíčů atp.  Obvykle dvě cesty  Vytváříme schéma databáze podle objektového modelu  Vytváříme objektový model podle existujícího databázového schéma  JPA lze použít pro oba přístupy  automatické generování databázového schéma  automatické generování tříd entit ze schéma (nic moc)  mapování pomocí anotací nebo xml

Základní mapovací prostředky  Potřebujeme-li změnit defaultní mapování třídy entity na databázovou tabulku  Anotace se umísťuje na třídu entity   Popisuje mapování atributů entity na sloupce tabulky  Anotace se umisťuje na atribut třídy nebo na příslušný getter  BigDecimal deposit;

Mapování primárních klíčů  Každá entita musí mít primární klíč  PK mohou být mapovány na jednu či více vlastností primitivní typy, java.lang.String, složené s uvedených identifikuje jednu či více vlastností entity  Doplněk říká, že hodnota PK se bude generovat TABLE – hodnota PK je udržována ve speciální tabulce SEQUENCE – hodnota PK je generována sekvencí IDENTITY – bude použit sloupec typu IDENTITY AUTO – volba je ponechána na poskytovatel JPA (default)

Generování PK přes tabulku  Programátorem definovaná tabulka, která v každé řádce udržuje hodnotu pro daný PK  Dva sloupce PRIMARY_KEY_COLUMN – název primárního klíče VALUE_COLUMN – hodnota počítadla (hodnota PK)  Tato volba generování musí být doplněna o anotaci – atributy: name – název generátoru, odkazu table – název db tabulky pkColumnName – název sloupce v tabulce pro názvy PK valueColumnName – název sloupce pro hodnoty PK pkColumnValue – název primárního klíče

TableGenerator - příklad

Generování PK přes sekvenci  Některé DB mají speciální struktury pro generování sekvencí (Oracle)  doprovodná anotace name – název generátoru pro odkazování sequence_name – název sekvence v DB initialValue – počáteční hodnota allocationSize – krok alokace

Generování přes sekvenci - příklad

Složené primární klíče  Někdy je zapotřebí, aby se PK skládal z více primitivních hodnot či řetězců  Složený klíč je reprezentován tzv. třídou PK  tato třída je přiřazena k  Třída PK musí být serializovatelná musí veřejný no-arg konstruktor musí implementovat hash() a equals()

Entita se složeným primárním klíčem Vyhledání podle složeného klíče:

Třída primárního klíče - příklad

Mapování vlastností entity – označení neperzistentních vlastností FetchType – mapování primitivních typů – mapování časových vlastností – mapování objemných dat (BLOB, CLOB) – mapování výčtových typů – mapování kolekcí primitivních typů a řetězců

Mapování neperzistentních vlastn.  Někdy chceme mít ve třídě entity vlastnost, kterou si nepřejeme ukládat do databáze  Označíme

Mapování primitivních typů  Mapování lze řídit  fetch – strategie načítání hodnoty; enum FetchType LAZY – hodnota se nahraje při prvním přístupu EAGER – hodnota se nahraje při ihned  optional – pokud je true, sloupec je chápán jako nulovatelný (nemusí obsahovat žádnou hodnotu)

Mapování časových vlastností  Časové vlastnosti lze mapovat do sloupců typu date, time a timestamp  By default se volí timestamp  enum TemporalType DATE TIME TIMESTAMP  Lze použít spolu pro zadání parametrů fetch a optional

Mapování objemných dat  JDBC definuje typy Blob a Clob pro objemná binární, resp. znaková data  Pomocí lze mapovat vlastnosti entity na tyto typy  pokud je typ vlastnosti char[], Character[] nebo java.lang.String -> Clob  pokud je typ byte[], Byte[], nebo java.lang.Serializable -> Blob  Anotaci lze kombinovat

Mapování výčtových typů  Pomocí lze mapovat vlastnosti, jejichž hodnota je výčtového typu  způsob je typu EnumType a může nabývat hodnot ORDINAL – hodnota ukládána do DB jako číslo (ordinál) STRING – hodnota ukládána do DB jako řetězec  Možno použít spolu

Mapování kolekcí základních typů  Od verze EJB 3.1 lze mapovat vlastnosti, jejichž hodnota je kolekce základních typů, bez nutnosti vytvářet speciální entitu pro prvky kolekce.  označuje vlastnost, která musí přiřaditelná typu java.util.Collection  T musí být obalující třída primitivního typu nebo String  atribut fetch určuje okamžik nahrání kolekce  vyladění názvu a vlastností tabulky pro kolekce  by default: název = název entity + vlastnost

Mapování mapy základních typů  Podobně jako u kolekce základních typů, od EJB 3.1 je možné mapovat mapy základních typů bez nutnosti vytvářet entitu pro dvojice v mapě  Znovu se použijí  Doprovodná určuje sloupec pro klíč mapy v tabulce pro dvojice  určuje sloupec pro hodnotu dvojice v mapě

Mapování mapy - příklad CLIENT_IDCARD_TYPECARD_NUMBER 1MASTERCARD VISA

Mapování entity na více tabulek  Někdy je třeba mapovat jednu entitu na dvě tabulky  např. v důsledku vývoje nad převzatým modelem  Sekundární tabulku lze specifikovat  name – název sekundární tabulky  pkJoinColumns – jeden či více sloupců v sekundární sekundární tabulce pro spojovací primární klíč do hlavní tabulky. Hodnotou je )

@Embedded objekty  JPA umožňuje navrhovat kompozitní entity, tj. entity, které obsahují jiné objekty, které sice nejsou entity, ale jejich vlastnosti jsou mapovány na tabulku hlavní entity.  Objekt komponenty je  Atribut hlavní entity, který drží komponentu je anotován obsahuje – mapování vlastnosti komponenty na sloupec tabulky hlavní entity

Komponenta kompozitní entity Kompozitní entita Client: