Java ´ ak ´ technologi ˝ as ´ 13. eload Perzisztencia ANTAL Margit Java Persistence API
´ ak ´ - 13. eload ˝ as ´ Java technologi Perzisztencia ANTAL Margit Sapientia - EMTE
2008
Object Relational Mapping Entity components ´ ok ´ Asszociaci ´ ıtasa ´ megvalos´
˝ as ´ celja ´ Az eload
Java ´ ak ´ technologi ˝ as ´ 13. eload Perzisztencia ANTAL Margit Java Persistence API Object Relational Mapping
◮
JPA - Java Persistence API - Java perzisztencia
◮
ORM - Object Relational Mapping ´ os ´ lekepz ´ es ´ Objektumrelaci
◮
´ Entity components - Entitasbabok ´ ok ´ megvalos´ ´ ıtasa ´ Asszociaci
◮
Entity components ´ ok ´ Asszociaci ´ ıtasa ´ megvalos´
Perzisztencia
Java ´ ak ´ technologi ˝ as ´ 13. eload Perzisztencia ANTAL Margit Java Persistence API Object Relational Mapping
◮
´ ´ ag ´ Alland os
◮
´ az alkalmazas ´ adatai Mechanizmus amely soran ˝ esre ´ megorz kerulnek valamely perzisztens ¨ ´ oban. ´ tarol
◮
´ o: ´ adatbazis ´ Perzisztens tarol
Entity components ´ ok ´ Asszociaci ´ ıtasa ´ megvalos´
Java Persistence API
Java ´ ak ´ technologi ˝ as ´ 13. eload Perzisztencia ANTAL Margit Java Persistence API
◮
◮ ◮
´ ¨ Minden alkalmazasszervernek kotelez o˝ ´ implementalni ´ ´ Hasznalhat o´ alkalmazasszerveren k´ıvul ¨ is ´ ´ Osztalyoza as: ◮ ◮
CMP - Container Managed Persistence AMP - Application Managed Persistence
Object Relational Mapping Entity components ´ ok ´ Asszociaci ´ ıtasa ´ megvalos´
Java ´ ak ´ technologi ˝ as ´ 13. eload Perzisztencia
ORM
ANTAL Margit Java Persistence API
◮
´ ´ enek ´ ¨ oz ¨ os ˝ ege ´ Problema: az adatok szervezes kul ¨ onb ◮
◮
◮
´ alkalmazas: ´ uzleti ´ Objektumorientalt reteg ¨ objektumok ´ ´ ´ os ´ Adatbazis reteg: relaci
´ ORM software (Java Persistence API Megoldas: Provider) ◮ ◮ ◮
Oracle Toplink Hibernate ...
Object Relational Mapping Entity components ´ ok ´ Asszociaci ´ ıtasa ´ megvalos´
´ lehetos ˝ egek ´ Fejlesztesi
Java ´ ak ´ technologi ˝ as ´ 13. eload Perzisztencia ANTAL Margit Java Persistence API Object Relational Mapping
◮
◮
top-down: Java Domain Objects ⇒ Database ´ ok ´ vagy XML konfiguraci ´ os ´ fajl ´ Schema; annotaci bottom-up: Database Schema + Data Model ⇒ Java Domain Objects; Reverse Engineering
Entity components ´ ok ´ Asszociaci ´ ıtasa ´ megvalos´
´ osztalyok ´ Entitas I @Entity public class Customer implements Serializable { @Id protected Long id; protected String name; protected Address address; protected PreferredStatus status; @Transient protected int orderCount; public Customer() {} public Long getId() {return id;} protected void setId(Long id) {this.id = id;} public String getName() {return name;}
Java ´ ak ´ technologi ˝ as ´ 13. eload Perzisztencia ANTAL Margit Java Persistence API Object Relational Mapping Entity components ´ ok ´ Asszociaci ´ ıtasa ´ megvalos´
´ osztalyok ´ Entitas II
Java ´ ak ´ technologi ˝ as ´ 13. eload Perzisztencia ANTAL Margit Java Persistence API Object Relational Mapping
public void setName(String name) {this.name = name;} ... }
Entity components ´ ok ´ Asszociaci ´ ıtasa ´ megvalos´
´ osztaly ´ - megkot ¨ esek ´ Entitas
Java ´ ak ´ technologi ˝ as ´ 13. eload Perzisztencia ANTAL Margit Java Persistence API
◮
´ publikus az osztaly
◮
az attributumok nem publikusak ´ ´ ´ at ´ akarom adni (tavoli ´ ´ ha parameterk ent interfesz) ´ akkor szerializalhat o´
◮
◮
◮
˝ ´ elsodleges kulcsnak megfelelo˝ attributumot annotalni ´ kell: @Id ´ uli public vagy protected argumentum nelk ¨ konstruktor
Object Relational Mapping Entity components ´ ok ´ Asszociaci ´ ıtasa ´ megvalos´
˝ Elsodleges kulcs
Java ´ ak ´ technologi ˝ as ´ 13. eload Perzisztencia ANTAL Margit
◮
◮
´ ´ os ´ adatbazisra ´ Minden entitasnak, amit relaci akarunk ´ ˝ lekepezni, rendelkeznie kell elsodleges kulccsal. ˝ ´ a kovetkez ¨ Elsodleges kulcskent o˝ t´ıpusok ´ ´ hasznalhat ok: ◮ ◮
◮
◮ ◮ ◮
Primit´ıv t´ıpusok: byte, int, short, long, char ´ Primit´ıv t´ıpusok burkolo´ osztalyai: Byte, Integer, Short, Long, Character ´ Primit´ıv t´ıpusok vagy azok burkolo´ osztalyainak ¨ tombje: byte[], int[], short[], long[], char[], Byte[], Integer[], Short[], Long[], Character[] ¨ Szoveges t´ıpusok: String ´ numerikus t´ıpusok: java.math.BigInteger Specialis ´ Datumok: java.util.Date, java.sql.Date
Java Persistence API Object Relational Mapping Entity components ´ ok ´ Asszociaci ´ ıtasa ´ megvalos´
´ ´ es ´ Alapertelmezett lekepz
Java ´ ak ´ technologi ˝ as ´ 13. eload Perzisztencia ANTAL Margit
◮
´ osztaly ´ ⇒ Adattabla ´ Entitas ´ osztaly ´ attributum ´ ˝ Entitas ⇒ Adattabla oszlop (mezo) ´
◮
´ osztaly ´ peld ´ any ´ ⇒ Adattabla ´ Entitas rekord
◮
´ ´ es ´ felul´ ´ okkal: ´ Az alapertelmezett lekepz ¨ ırhato´ annotaci @Table(name="CUST") public class Client{ @Column(name="cname") private String clientName; ... }
Java Persistence API Object Relational Mapping Entity components ´ ok ´ Asszociaci ´ ıtasa ´ megvalos´
˝ ´ as ´ Elsodleges kulcs general
Java ´ ak ´ technologi ˝ as ´ 13. eload Perzisztencia ANTAL Margit Java Persistence API Object Relational
Mapping @Entity Entity @Table( name = "CUST") components public class Client{ ´ ok ´ Asszociaci ´ ıtasa ´ megvalos´ @Id @GeneratedValue(strategy=GenerationType.AUTO) private int clientReference; //... }
´ ´ es ´ felul´ ´ Alapertelmezett lekepz ¨ ırasa
Java ´ ak ´ technologi ˝ as ´ 13. eload Perzisztencia ANTAL Margit
@Entity @Table(name="CUST") public class Customer{ @Transient private int notPersistent; //.. @Column(name=cname) private String clientName; //... }
Java Persistence API Object Relational Mapping Entity components ´ ok ´ Asszociaci ´ ıtasa ´ megvalos´
Alapfogalmak
Java ´ ak ´ technologi ˝ as ´ 13. eload Perzisztencia ANTAL Margit
◮
´ ´ ´ Entity life-cycle states -eletcikus anak allapotok: ◮ ◮
◮
◮
´ rekord uj ´ - new - nincs hozzarendelt ´ menedzselt - managed - szinkronban van az entitas ´ az adatbazis rekorddal ´ az lecsatolt - detached - nincs szinkronban az entitas ´ adatbazis rekorddal ¨ olt ¨ - removed - az adattabla ´ tor megfelelo˝ rekordja ki ¨ odni ˝ fog torl
◮
Entity manager: az az objektum, amely kezeli az ´ ´ ezek eletciklus ´ ´ entitasobjektumokat, vezerli at
◮
´ Persistence context: egyedi entitasok halmaza ´ ek, ´ amely az Persistence identity: egy egyedi ert ´ azonos´ıtas ´ ara ´ szolgal. ´ Egy entitas ´ objektum entitas ⇒ egy rekord
◮
Java Persistence API Object Relational Mapping Entity components ´ ok ´ Asszociaci ´ ıtasa ´ megvalos´
EntityManager muveletek ˝
Java ´ ak ´ technologi ˝ as ´ 13. eload Perzisztencia ANTAL Margit
◮
persist()
◮
merge()
◮
remove()
◮
find()
Java Persistence API Object Relational Mapping Entity components ´ ok ´ Asszociaci ´ ıtasa ´ megvalos´
´ ¨ ott ¨ Kapcsolatok entitasok koz
Java ´ ak ´ technologi ˝ as ´ 13. eload Perzisztencia ANTAL Margit Java Persistence API
´ ´ Osztalyoz as: ◮ Kapcsolat szamoss ´ ´ aga: ◮ ◮ ◮ ◮
◮
egy-egy sok-egy egy-sok sok-sok
´ ıtottsaga: ´ Kapcsolat irany´ ◮ ◮
´ u´ egyirany ´ any ´ u´ ketir
Object Relational Mapping Entity components ´ ok ´ Asszociaci ´ ıtasa ´ megvalos´
´ u, Egyirany ´ egy-egy kapcsolat Customer → Record
Java ´ ak ´ technologi ˝ as ´ 13. eload Perzisztencia ANTAL Margit
@Entity public class Customer{ @Id private int id; @OneToOne private Record custRecord; //... } @Entity public class Record{ @Id private int recId; //... }
Java Persistence API Object Relational Mapping Entity components ´ ok ´ Asszociaci ´ ıtasa ´ megvalos´
´ any ´ u, Ketir ´ egy-egy kapcsolat Customer ↔ Record @Entity public class Customer{ @Id private int id; @OneToOne private Record custRecord; //... } @Entity public class Record{ @Id private int recId; @OneToOne(mappedBy="custRecord") private Customer customer; //...
Java ´ ak ´ technologi ˝ as ´ 13. eload Perzisztencia ANTAL Margit Java Persistence API Object Relational Mapping Entity components ´ ok ´ Asszociaci ´ ıtasa ´ megvalos´
´ any ´ u´ Egy-egy kapcsolat (egy, illetve ketir
Java ´ ak ´ technologi ˝ as ´ 13. eload Perzisztencia ANTAL Margit Java Persistence API Object Relational Mapping Entity components ´ ok ´ Asszociaci ´ ıtasa ´ megvalos´
´ any ´ u´ egy-sok, illetve sok-egy Ketir kapcsolat Customer ↔ Order @Entity public class Customer{ @Id private int id; @OneToMany(mappedBy="customer") private Collection
orders; //... } @Entity public class Order{ @Id private int orderId; @ManyToOne private Customer customer;
Java ´ ak ´ technologi ˝ as ´ 13. eload Perzisztencia ANTAL Margit Java Persistence API Object Relational Mapping Entity components ´ ok ´ Asszociaci ´ ıtasa ´ megvalos´
Egy-sok kapcsolat
Java ´ ak ´ technologi ˝ as ´ 13. eload Perzisztencia ANTAL Margit Java Persistence API Object Relational Mapping Entity components ´ ok ´ Asszociaci ´ ıtasa ´ megvalos´
´ any ´ u´ sok-sok kapcsolat Ketir Worker ↔ Project @Entity public class Worker{ @Id private int id; @ManyToMany private Collection projects; //... } @Entity public class Project{ @Id private int pId; @ManyToMany(mappedBy="projects") private Collection<Worker> workers; //... }
Java ´ ak ´ technologi ˝ as ´ 13. eload Perzisztencia ANTAL Margit Java Persistence API Object Relational Mapping Entity components ´ ok ´ Asszociaci ´ ıtasa ´ megvalos´
Sok-sok kapcsolat
Java ´ ak ´ technologi ˝ as ´ 13. eload Perzisztencia ANTAL Margit Java Persistence API Object Relational Mapping Entity components ´ ok ´ Asszociaci ´ ıtasa ´ megvalos´