JPA támogatás Eclipse-ben

Hasonló dokumentumok
A Java Persistence API PersistenceAPI / 3

Java. Perzisztencia. ANTAL Margit. Java Persistence API. Object Relational Mapping. Perzisztencia. Entity components. ANTAL Margit.

Perzisztencia. ANTAL Margit. Sapientia - EMTE. ANTAL Margit Java technológiák 11. előadás Perzisztencia

Enterprise JavaBeans. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem. Az Enterprise JavaBeans

Enterprise JavaBeans 1.4 platform (EJB 2.0)

EJB - Perzisztencia. EntityManager

Előszó. Bevezetés. Java objektumok leképzése relációs adatbázisokra OJB-vel Viczián István Viczián István

Szakdolgozat. Kovács Lilla

6. rész: EJB-k tervezése és implementálása

JEE tutorial. Zsíros Levente, 2012

Bevezetés: az SQL-be

Adatbázis rendszerek I

7. rész: A specifikációtól az implementációig az EJB rétegben

JAVA PROGRAMOZÁS 2.ELŐADÁS

Célkitűzések Az Oracle10 g felépítésének, használatának alapszíntű megismerése

Programozási nyelvek Java

Adatmodellezés, alapfogalmak. Vassányi István

SQL. 1.rész. 1.elıadás // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 1

A relációs adatbáziskezelés szabványos nyelve Két fő csoportba sorolhatók az utasításai

Bevezetés az SQL-be. Tankönyv: Ullman-Widom: Adatbázisrendszerek Alapvetés Második, átdolgozott kiadás, Panem, 2009

A Java EE 5 plattform

SQL ALAPOK. Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai

OOP #14 (referencia-elv)

Se S r e ial a iza z t a ion o n (in n Ja J v a a v ) a Szerializáció

Enterprise Java Beans. EJB - Általános bevezető

Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

Webes alkalmazások fejlesztése 3. előadás. Objektumrelációs adatkezelés (ASP.NET)

Bevezetés a Seam keretrendszer használatába

Adatbázis rendszerek. dr. Siki Zoltán

S04-2 Elosztott alkalmazások készítése

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

Metamodellezés. Simon Balázs BME IIT, 2011.

Kliens oldali SQL-API

Relációsémák létrehozása SQL nyelvben

Osztályok. 4. gyakorlat

Adatbáziskezelő-szerver. Relációs adatbázis-kezelők SQL. Házi feladat. Relációs adatszerkezet

SQL DDL-1: táblák és megszorítások

Tartalom. Az EJB 2.1 problémái Az EJB 3 megoldásai

Eseményvezérelt alkalmazások fejlesztése II 10. előadás. Objektumrelációs adatkezelés (Entity Framework) Cserép Máté

Tranzakciókezelés PL/SQL-ben

Programozási nyelvek Java

C#, OOP. Osztályok tervezése C#-ban

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Eseményvezérelt alkalmazások fejlesztése II 12. előadás. Objektumrelációs adatkezelés (ADO.NET) Giachetta Roberto

ADATBÁZIS-KEZELÉS - BEVEZETŐ - Tarcsi Ádám, ade@inf.elte.hu

Adatmodellezés. 1. Fogalmi modell

Adatbázisrendszerek. adatbázisokban. Objektumorientált és objektum-relációs adatbázisok április 24.

ANDROID ALKALMAZÁSFEJLESZTÉS

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

Webes alkalmazások fejlesztése 3. előadás. Objektumrelációs adatkezelés (Entity Framework) Cserép Máté

OO PDO. Tehát PDO használatával, könnyen átállhatunk egy másik adatbáziskezelőre, anélkül hogy a kódot teljes egészében újraírnánk.

Szoftver Tervezési Dokumentáció. Nguyen Thai Binh

Informatikai képzés Információs rendszerek dr. Hajas Csilla (ELTE IK)

Adatbázisok webalkalmazásokban

Adatbáziskezelı-szerver SQL. Relációs adatbázis-kezelık. Relációs adatszerkezet. Házi feladat

Szerializáció. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Szerializáció / 22

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Szoftverarchitektúrák. 12. Sorozat portál (követelmény specifikáció)

SZAKDOLGOZAT CSEHI MIKLÓS DEBRECEN 2009.

ADATBÁZIS-KEZELÉS. Relációs modell

Programozási nyelvek Java

C++ programozási nyelv

Adatbázis, adatbázis-kezelő

Java programozási nyelv 5. rész Osztályok III.

Tranzakció-kezelés, alapfogalmak. Vassányi István, 2012.

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Objektum relációs lehetőségek az Oracle-ben. Katona Endre Adatbázis alapú rendszerek diasorozata alapján

Programozás I. 5. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

Adatbázis-kezelő rendszerek. dr. Siki Zoltán

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás

B I T M A N B I v: T M A N

Magas szintű adatmodellek Egyed/kapcsolat modell I.

SQL. Táblák összekapcsolása lekérdezéskor Aliasok Allekérdezések Nézettáblák

SQL- Utasítások csoportosítása Definíció: DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17

Java és web programozás

Adatbázis-lekérdezés. Az SQL nyelv. Makány György

Programozási nyelvek Java

Informatikai alapismeretek Földtudományi BSC számára

ELTE SAP Excellence Center Oktatóanyag 1

Webes alkalmazások fejlesztése 3. előadás. Objektumrelációs adatkezelés (Entity Framework) Cserép Máté.

SQL jogosultság-kezelés. Privilégiumok Grant és Revoke Grant Diagrammok

A JavaServer Pages (JSP)

Adattárház tiszta alapokon Oracle Day, Budapest, november 8.

Debreceni Egyetem Informatikai Kar TANULÓI NYILVÁNTARTÓ SZOFTVER FIREBIRD ADATBÁZIS ALKALMAZÁSÁVAL

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Objektumorientált programozás C# nyelven

Java Persistence API. Jeszenszky Péter Debreceni Egyetem, Informatikai Kar Utolsó módosítás: december 20.

INFORMATIKA ÁGAZATI ALKALMAZÁSAI. Az Agrármérnöki MSc szak tananyagfejlesztése TÁMOP /1/A

Alternatív adatbázisok Gráfadatbázisok

Adatbázis Rendszerek II. 1. SQL programozási felületek 39/1B IT MAN

Tartalomjegyzék. Tartalomjegyzék 1. Az SQL nyelv 1 Az SQL DDL alapjai 2

Bevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum

Abstract osztályok és interface-ek. 7-dik gyakorlat

Komponens alapú fejlesztés

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

Programozás III KIINDULÁS. Különböző sportoló típusok vannak: futó, magasugró, focista, akik teljesítményét más-más módon határozzuk meg.

Átírás:

JPA támogatás Eclipse-ben

Tartalom v ORM alapok v JPA technológia v JPA használatát segítő Eclipse technológiák 2

ORM alapok Object-Relational Mapping 3

Object-Relational Mapping v Cél: objektumok tárolása adatbázisban v Probléma: az objektum-orientált és a relációs adatmodell közötti különbségek v Megoldás: automatizált leképezés 4

Object-Relational Mapping v Leképezés: Osztályhierarchia Osztály Mező Objektum Séma Tábla Oszlop Sor 5

Object-Relational Mapping v Példa: class Book { int id; String title; String author; } CREATE TABLE Book ( INTEGER id, VARCHAR(255) title, VARCHAR(255) author ); 6

Problémás esetek v Hivatkozáshoz objektumoknál van referencia, ehelyett kell elsődleges kulcs v Öröklés Többféle stratégia, ld. később v Eltérő adattípusok v Mikor szinkronizáljunk a memóriában levő modell és az adatbázis között? 7

ORM keretrendszerek v Sok különböző ActiveObjects Öröklés + annotációk Torque JPA Kódgenerálás XML leíró fájlokból Annotációk és/vagy XML 8

JPA technológia Java Persistence API 9

Java Persistence API v EJB 3 specifikáció része v Elfedi az adatbázisszerver-specifikus részleteket v Futásidőben átlátszóan setterekkel tudjuk módosítani az objektumokat 10

JPA providerek v A JPA csak egy API specifikáció v Megvalósítását providerek biztosítják Hibernate OpenJPA Toplink EclipseLink 11

A JPA használata v Java osztályok (POJO) annotációkkal Alternatív módon: leképezés adatok XML-ben Felülírja az annotációkat Nem használjuk v Alapelem: Entity = perzisztens osztály v Perzisztens modul minden olyan jar, amelynek META-INF könyvtárában van persistence.xml fájl, amiben pl. a provider kerül definiálásra v javax.persistence csomag tartalmazza 12

Entitás megadása v Java osztály @Entity-vel (javax.persistence.entity) annotálva, default konstruktorral v Általában szerializálható (implements Serializable) v Kötelező elsődleges kulcs attribútum: @Id többféle automatikus ID-generáló stratégia megadható a strategy paraméterben 13

Entitás attribútumai v A perzisztens attribútumokat a kliensek getterek/setterek formájában érhetik el (JavaBean konvenció) v Nem perzisztens (tranziens) attribútum: @Transient v Attribútum típusa lehet: primitív típus String, BigInteger, BigDecimal, java.util.date, java.util.calendar, java.sql.date, java.sql.time, java.sql.timestamp, byte[], Byte[], char[], Character[] Enum más entitás, más entitások gyűjteménye beágyazott osztály 14

Beágyazott osztály v Olyan osztály, ami önmagában nem él perzisztens entitásként, csak egy perzisztens entitás példányához kapcsolódva, pl. @Embeddable public class EmploymentPeriod {... } java.util.date startdate; java.util.date enddate; v Felhasználása egy entitáson belül: @Embedded @AttributeOverrides({ }) @AttributeOverride(name="startDate", column=@column("emp_start")), @AttributeOverride(name="endDate", column=@column("emp_end")) public EmploymentPeriod getemploymentperiod() {... } 15

A leképezés testreszabása v Az entitás, illetve az attribútumok nevével azonos a default tábla- és oszlopnév, ez felülírható v @Table(name= MyTable ) @SecondaryTable(s) annotációval több táblába is szétszedhető v @Column(name= MyColumn ) v Az oszlopoknak egyéb paraméterei is vannak nullable unique length 16

Öröklés v Fontos OO koncepció, melynek leképezése relációs adatbázisra nem triviális v EJB3-tól kezdve v Lehetséges leképezési módok: egy tábla egy osztályhierarchiához külön tábla gyermekosztályonként, hivatkozással egy tábla egy konkrét osztályhoz 17

Egy tábla egy osztályhierarchiához v egy táblában minden gyermekosztály v diszkriminátor oszlop írja le a típust v + hatékony (nem kell join) v + polimorfizmust támogatja v - mély hierarchia eseten sok, fölösleges oszlop v - a gyermekosztályok attribútumainak megfelelő oszlopoknak nullázhatóknak kell lenniük 18

Egy tábla egy osztályhierarchiához v A hierarchia legfelső szintjén: @Inheritance(strategy=InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name=<oszlopnév>) v A hierarchia összes osztályánál: @DiscriminatorValue(<típusra utaló érték>) 19

Egy tábla egy osztályhierarchiához Animal Dog Cow 20

Külön tábla gyermekosztályonként v Az ősosztályban definiált oszlopok egy táblában v A gyermekosztályokban definiált oszlopok külön táblákban + idegen kulcs az ősre v + nincsenek fölösleges oszlopok v + definiálható nem nullázható oszlop v + polimorfizmust támogatja v - mély hierarchia esetén a sok join rontja a teljesitményt v @Inheritance(strategy=InheritanceType.JOINED) 21

Külön tábla gyermekosztályonként Animal Dog Cow 22

Önálló táblák gyermekosztályonként v Külön tábla minden altípushoz v Minden tábla tartalmazza az ősosztály attribútumait is v + hatékony v - polimorfizmus támogatása nehézkes (oszlopdefiníciók többször szerepelnek) v az EJB 3 nem követeli meg a támogatását 23

Önálló táblák gyermekosztályonként Animal Dog Cow 24

Egyéb öröklési lehetőségek v Entitás származhat nem entitásból @MappedSuperClass-szal megjelölve az ősosztályt, annak nem lesz külön táblája egyik leképezési stratégia esetén sem, de az ottani attribútumok adatbázisba kerülnek nem megjelölve egyáltalán nem kerülnek bele v Nem entitás származhat entitásból v Entitás lehet absztrakt nem példányosodhat, de le lehet képezni táblába le lehet kérdezni 25

Relációk v Számosság szerint négyféle: @OneToOne @OneToMany @ManyToOne @ManyToMany v Irány szerint kétféle: Egyirányú Kétirányú (a kapcsolat mindkét végén levő entitásnak lesz kapcsolatmenedzselő getter/setter metódusa): mappedby paraméter v Kétirányú OneToMany = Kétirányú ManyToOne v A kapcsolatnak mindig egy tulajdonos oldala van 26

Példa reláció definiálására v Tulajdonos oldalon (Employee): @ManyToOne @JoinColumn(name= company_id ) private Company company; v Másik oldalon (Company): @OneToMany(mappedBy= company_id ) private Collection<Employee> employees; v v v + getterek, setterek a @JoinColumn helyett @JoinTable használandó, ha külön tábla tartja nyilván a kapcsolatot (pl. ManyToMany esetén mindenképpen) A @ManyToOne kötelezően tulajdonos oldal, mert nincs mappedby paramétere, többi esetben szabadon választható a tulajdonos oldal 27

Relációk kaszkádosítása v Mind a 4 kapcsolatdefiniáló annotációhoz megadható egy cascade elem, pl. @OneToMany(cascade={ CascadeType.PERSIST, CascadeType.MERGE}) v Lehetséges értékek: PERSIST MERGE REMOVE REFRESH ALL v Azt adja meg, milyen műveletek hívódjanak meg a kapcsolódó entitásokra is v Default: nincs cascade 28

Fetch v Mind a 4 kapcsolatdefiniáló annotációhoz megadható egy cascade elem, pl. @OneToMany(fetch=FetchType.LAZY) v Azt adja meg, hogy egy entitás betöltésekor betöltődjenek-e a kapcsolódó entitások is v LAZY (lusta): nem töltődnek be, csak ha hivatkozunk rájuk így nem foglal memóriát, csak ha szükség van rá, de +1 lekérdezés v EAGER (mohó, ez a default): kezdetben betöltődnek gyorsabb, de több memóriát foglal v Finomhangolási lehetőség: legyen LAZY, de azokban a lekérdezésekben, ahol tudjuk, hogy szükség lesz a kapcsolódó entitásokra, használjunk fetch join-t az EJB-QL queryben, pl. SELECT c form Customer c LEFT JOIN FETCH c.orders 29

Lazy fetch problémák v Lecsatolt állapotban csak a korábban már hivatkozott kapcsolódó objektumokat fogja tartalmazni az entitás v Ha egy kapcsolatait a lecsatolódás miatt részben elveszítő entitást vissza-merge-elünk, az adatbázisban is törlődnek a kapcsolatok v A Lazy csak tanács, a persistence provider dönthet úgy, hogy mégis betölti mohó módon a kapcsolatokat 30

Perzisztencia kontextus v A persistence provider által kezelt entitások egy halmaza v Azonosítás a persistence unit nevével v Entity manager lekérése pl.: EntityManagerFactory factory = Persistence.createEntityManagerFactory( PERSISTENCE_UNIT_NAME); EntityManager entitymanager = factory.createentitymanager(); 31

Entity Manager v Entitások kezeléséért felelős v Használata: Entitások életciklusának kezelése Szinkronizáció az adatbázissal Entitások keresése lekérdezésekkel 32

Tranzakciókezelés v Tulajdonságok: Atomic Consistent Isolated Durable v Hívások: entitymanager.gettransaction(). begin() commit() rollback() 33

Entitások állapotai v new: new-val létrehozva kerül ide, csak a memóriában létezik, a módosítások nem mennek adatbázisba v managed: létezik az adatbázisban, és hozzátartozik egy perzisztencia kontextushoz. Ez azzal jár, hogy a módosítások tranzakció commit végén, vagy explicit flush() hívással bekerülnek az adatbázisba v detached: adatbázisban megvan, de nem tartozik perzisztens kontextushoz; ebben az állapotban olyan, mint egy DTO (Data Transfer Object) v removed: még perzisztencia kontextushoz tartozik, de már ki van jelölve, hogy törölve lesz az adatbázisbol 34

Entitások életciklusa 35

Entitás életciklus callbackek v Metódusok a következő annotációk valamelyikével: @PrePersist @PostPersist @PreRemove @PostRemove @PreUpdate @PostUpdate @PostLoad v A persistence provider hívja őket v Ha külön osztályba akarjuk rakni, @EntityListeners-ben kötjük hozzá az entitáshoz az osztályt, és a metódusok az entitást megkapják paraméterül 36

Adatbázis szinkronizáció v Általában commitkor automatikusan megtörténik v Explicit módon is megtehetjük az EntityManageren keresztül: flush(entity): beírja a változtatásokat refresh(entity): beolvassa a változtatásokat 37

Lekérdezések v Egyszerű keresés elsődleges kulcs alapján: <T> T find(class<t> entityclass, Object primarykey) v Bonyolultabb lekérdezések: EJB-QL nyelven: public Query createquery(string ejbqlstring) natív SQL: public Query createnativequery(string sqlstring) 38

Lekérdezések v Paraméterkezelés (biztonság): setparameter(string, Object)/setParameter(int, Object): név vagy index alapján v Eredmény lekérése: getsingleresult() getresultlist() v Módosítás/törlés executeupdate() Lehetőség van tömeges törlésre/módosításra 39

Konkurenciakezelés v Két lehetőség Optimista @Version-nel meg kell jelölni egy egész szám vagy TimeStamp típusú attribútumot ezt a persistence provider kezeli (update-kor növeli), kódból nem módosítjuk ha beíráskor azt látja, hogy a verziószám módosult (egy konkurens kliens módosítása miatt), nem módosít, hanem OptimisticLockException-t dob Explicit zárak entitymanager.lock(object entity, LockMode) LockMode: READ vagy WRITE lehet csak tranzakción belül hívható 40

JPA használatát segítő Eclipse technológiák Eclipse Dali, EclipseLink 41

Eclipse Dali v A Web Tools Platform része Természetesen Java SE-vel is használható v Forms alapú szerkesztőfelület Persistence unit Entity v Függőségkezelés megkönnyítése v Integráció bármelyik providerrel, de EclipseLinkkel a legkényelmesebb v Egyéb eszközök: Entitások és táblák közötti konverzió Annotált & persistence.xml-ben felsorolt entitások szinkronizációja 42

Eclipse Dali 43

EclipseLink v TopLinkre épül v Jól használható OSGi környezetben v Együttműködik a Dalival v org.eclipse.persistence.jpa bundle 44

EclipseLink-specifikus propertyk v A provider neve org.eclipse.persistence.jpa.persistenceprovider OSGI környezetben org.eclipse.persistence.jpa.osgi.persistenceprovider v Automatikus sémalétrehozás <property name="eclipselink.ddl-generation" value="dropand-create-tables"/> vagy create-tables <property name="eclipselink.ddl-generation.output-mode" value="database"/> 45

Használat v EntityManager lekérése EntityManager entitymanager = new org.eclipse.persistence.jpa.osgi.persistenceprovider(). createentitymanagerfactory(persistence_unit_name). createentitymanager(); v Tranzakció kezdés entitymanager.gettransaction().begin(); v Tranzakció befejezés entitymanager.gettransaction().commit(); v EntityManager lezárása entitymanager.close(); 46

További források v Prezentációk http://www.slideshare.net/junyuo/java-persistence-api-jpa-step-bystep-presentation http://www.slideshare.net/caroljmcdonald/ persistencecmcdonaldmainejug3 v Tutorialok http://www.vogella.de/articles/javapersistenceapi/article.html http://www.vogella.de/articles/eclipsedali/article.html 47