Interfejsy obiektowo

Transkrypt

Interfejsy obiektowo
Odwzorowanie obiektoworelacyjne
Wykład opracowali:
Marek Wojciechowski
i Tomasz Koszlajda
Plan wykładu
`
`
`
`
Techniki odwzorowania O/R
JDBC
Hibernate
Java Persistence
1
Odwzorowanie obiektowo-relacyjne
`
Odwzorowanie obiektowej architektury systemu
informatycznego w relacyjne struktury danych bazy danych
Aplikacja obiektowa
Wielokąt
#typFigury string
#liczbaWierzch integer
+Powierzchnia() : Float
+Przesuń(Float, Float)
+DodajWierzch(Punkt)
Logiczny model danych – logika biznesowa
Middleware
select *
from Wielokąty
iinsertt into
i t wielokąty
i l k t
values (w.typFigury, …)
Odwzorowanie O/R
Relacyjna baza
danych
Wielokąty
idWielokąta number(9) PK
typFigury varchar(15)
LiczbaWierzch number(3)
wBazieDanych
B i D
hb
boolean
l
Fizyczny model danych Techniki O/RM
`
`
`
`
`
`
Dodanie do schematów relacji atrybutów
implementacyjnych
U
Utrzymywanie
i meta-danych
d
h opisujących
i j
h reguły
ł
odwzorowania R/M
Odwzorowanie sieci dziedziczenia klas
Odwzorowanie związków między klasami
Odwzorowanie atrybutów klas
S j i wydajności
Strojenie
d j ś i odwzorowania
d
i
2
Atrybuty implementacyjne
Oprócz odwzorowania atrybutów informacyjnych w O/RM niezbędne
jest używanie dodatkowych atrybutów implementacyjnych
`
Punkt
Wielokąt
#X : Float
#typFigury string
#Y : Float
jjestWierzchołkiem
tWi
h łki
#liczbaWierzchołków integer
+Powierzchnia() : Float
[1] +Kąt() : Float
[3..*]
+Odległość() : Float
+Przesuń(Float, Float)
+Przesuń(Float, Float)
+DodajWierzchołek(Punkt)
[2]
tworzKrawędźZ
[2]
Wielokąty
idWielokąta number(9) PK
typFigury varchar(15)
LiczbaWierzchołków number(3)
wBazieDanych boolean
`
`
Klucze podstawowe i obce
Zapewnienie trwałości danych
Punkty
idPunktu number(10) PK
idWielokąta number(9) FK
X number(5,2)
Y number(5,2)
wBazieDanych boolean
`
Znaczniki czasowe
Utrzymywanie meta-danych
Schemat bazy danych należy rozszerzyć o informacje dotyczące logiki
odwzorowania O/R:
y y relacjij
• Zmienne obiektów → atrybuty
• Związki → atrybuty, tabele
• Atrybuty wielowartościowe obiektów → tabele
• Konwersja typów danych
• Źródło danych
• …
klasa
typ
tabela
kolumna
Pracownik Nazwisko
zmienna
string
Pracownicy
Nazwisko varchar
Pracownik Szef
Pracownik Pracownicy
Pracownik JęzykiObce set(string)
Id_szefa
Języki_obce Nazwa
typ
number
String
…
3
Odwzorowanie sieci dziedziczenia
Dostępnych jest kilka metod odwzorowania:
`
Osoba
+imię : String
+nazwisko : String
+wiek : integer
+płeć : Płeć
`
{non complete, overlapping}
Pracownik
+etat: String
+płaca: float
+firma: Sring
Student
`
+Uczelnia: String
+Kierunek: String
+rokStudiów: integer
`
Odwzorowanie
hierarchii klas w
pojedynczą tablicę
Odwzorowanie
konkretnych klas w
osobne tabele
Odwzorowanie każdej
kl
klasy
w osobną
b tabelę
t b l
Odwzorowanie klas w
uniwersalną strukturę
tabel
Odwzorowanie hierarchii klas w pojedynczą tabelę
Osoby
Imię
Nazwisko
Płeć
Etat
Płaca
Firma
Uczelnia
Kierunek
RokStudiów
j S d
jestStudentem
jestPracownikiem
Własności:
• W tabeli będzie przechowywanych dużo
zwartości pustych
• Tablica
T bli może
ż osiągać
i
ć duży
d ż rozmiar
i
• Łatwość przetwarzania polimorficznego
• Duża wydajność dla przetwarzania
heterogenicznego
• Mała wydajność dla przetwarzania
homogenicznego
• Mała wydajność dla modyfikacji struktury
pojedynczych
p
j y
y klas
• Trudne utrzymywanie przynależności do
typów
Dobre dla prostych i płaskich hierarchii klas
4
Odwzorowanie konkretnych klas w osobne
tabele
• Jeżeli klasa Osoba jest klasą
abstrakcyjną
• Zależność między
ę y podzbiorami
p
danych typu complete
Własności:
Pracownicy
idPracownika
Imię
Nazwisko
Płeć
Etat
Płaca
Firma
•
•
Studenci
idStudenta
Imię
Nazwisko
Płeć
Uczelnia
Kierunek
RokStudiów
•
•
Trudna implementacja
overlapping - konieczność
implementacji wspólnej
dziedziny dla kluczy relacji
Mała wydajność dla
przetwarzania
polimorficznego
Duża wydajność dla
przetwarzania
homogenicznego
Modyfikacja klasy z
podklasami wymaga
modyfikacji schematów wielu
tabel
Dobre dla rozłącznych podzbiorów rozszerzeń klas
Odwzorowanie każdej klasy w osobną tabelę
Osoby
idOsoby
Imię
ę
Nazwisko
Płeć
Pracownicy
idOsoby FK
Etat
Płaca
Firma
Studenci
idOsoby FK
Uczelnia
Kierunek
RokStudiów
Własności:
•
•
•
•
•
•
Proste odwzorowanie 1:1
Łatwość p
przetwarzania
polimorficznego
Łatwe utrzymywanie dla
modyfikacji nadklas i dodawania
podklas
Rozmiar struktur proporcjonalny
do liczby danych
D
Duża
li b tablic
liczba
bli
Mała wydajność przetwarzania
homogenicznego
Dobre dla pokrywających się podzbiorów
rozszerzeń klas i często zmieniających się klas
5
Odwzorowanie klas w uniwersalną strukturę
tabel
Własności:
` Łatwość utrzymania dla zmian schematu
` Trudne i mało wydajne przetwarzanie
Dobre dla złożonych aplikacji przetwarzających
niezbyt duże zbiory danych
Odwzorowanie cech klas
`
Osoby
+i i : String
+imię
St i
+nazwisko : String
+płeć : Płeć
+liczbaOsób : Integer
Możliwe strategie:
`
`
`
`
Jednokolumnowa i jednowierszowa
tabela dla każdej cechy
Wielokolumnowe i jednowierszowe
tabele dla każdej z klas
Wielokolumnowa i jednowierszowa
tabela wspólna dla wszystkich klas
Wielowierszowa tabela o
generycznym schemacie wspólna
dla wszystkich klas
6
Strojenie wydajności
`
`
Strojenie mapowania struktur obiektowych na
yj
wybór
y
strategii
g odwzorowania hierarchii
relacyjne:
dziedziczenia, związków i cech klas
Opóźnione czytanie: dla dużych obiektów żądanie
dostępu do obiektu może być realizowane jako
odczyt jedynie podzbioru danych składających się na
obiekt. Pozostałe części obiektu będą doczytane w
momencie wystąpienia żądania dostępu do nich
Oferta OR/M
`
Lista produktów O/RM
• ObjectRelationalBridge (OJB) - projekt open source wspierający API ODMG
and JDO
• TopLink - O/RM dla języka Java na serwery WWW
• EnterpriseObjectFramework (EOF) - framework używany w WebObjects na
Apple
• JdoGenie - wydajna implementacja JDO
• ClassDbi - O/RM dla języka Perl
• HiberNate - projekt open source dla Javy
• ActiveRecord – framework dla języka
• SQLObject – framework dla języka Python
• EZPDO – framework dla PHP5
• Picasso - framework na platformę .NET
• Gentle.NET - framework dla .NET pisany w C#
• Genome - O/RM dla platformy .NET and systemów SQL Server/Oracle
• AtomsFramework - framework dla VB6 and .NET
7
JDBC - Java Database Connectivity
Dostęp z poziomu języka Java do relacyjnej bazy danych
Umożliwia ręczne wyłuskiwanie wartości danych
Dostęp do bazy danych wymaga:
• Załadowania sterownika systemu bazy danych, którego
wynikiem będzie dostęp do systemowego obiektu:
DriverManager
• Zainicjowania połączenia z bazą danych za pomocą
metody getConnection
tC
ti
Connection mp = DriverManager.getConnection (
<URL>, <login>, <hasło> );
Dostęp do danych
Dostęp do danych jest wykonywany za pomocą klasy:
ResultSet
Statement zapyt = mp.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
ResultSet wynik = zapyt.executeQuery(
"SELECT etat FROM Pracownicy");
// wynik
ik nie
i b
będzie
d i pokazywał
k
ł zmian
i wprowadzanych
d
h
// przez innych i będzie modyfikowalny
8
Operacje za pomocą kursora
Dostęp do konkretnych krotek wyniku wymaga
zastosowania kursora:
int x = 65041203789;
String e = "Prezes";
while (wynik.next( )) {
int Pesel = wynik.getInt(1);
if (Pesel = x) {
String etat = wynik.updateString(2,e);
}
}
Dostęp do danych polega na przenoszeniu wartości
między systemem danych bazy danych a systemem
danych języka programowania
Technologie O/RM
`
`
O/RM = Object-Relational Mapping = odwzorowanie
obiektowo-relacyjne
Obejmują:
`
`
`
`
API do zarządzania trwałością obiektów
mechanizm specyfikowania metadanych opisujących
odwzorowanie klas na relacje w bazach danych
język lub API do wykonywania zapytań
Popularne
p
implementacje
p
j O/RM:
`
`
`
Hibernate
Oracle Toplink
JDO
9
Hibernate
`
`
`
`
`
`
`
Najpopularniejsza implementacja odwzorowania
obiektowo-relacyjnego dla języka Java
Obsługa asocjacji
asocjacji, kompozycji
kompozycji, dziedziczenia
dziedziczenia,
polimorfizmu, kolekcji
Wysoka wydajność i skalowalność
Wiele sposobów zadawania zapytań
Wykorzystuje siłę technologii relacyjnych baz danych
Professional Open Source (JBoss Inc.)
Obecnie jedna z implementacji standardu Java
Persistence
Architektura Hibernate
Aplikacja
Trwałe obiekty
Hibernate
Plik konfiguracyjny
Definicje
odwzorowania O/R
Baza danych
10
Konfiguracja Hibernate
hibernate.cfg.xml
1
2
3
4
5
6
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate
hibernate-configuration
config ration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.datasource">
jdbc/sample</property>
<property
t name="dialect">
"di l t"
org.hibernate.dialect.OracleDialect</property>
<mapping resource="myhib/Dept.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Specyfikacja klas trwałych obiektów
Klasy encyjne występujące w logicznym modelu
danych aplikacji
Definiowane w formie Plain Old Java Object (POJO)
Najlepiej posiadające sztuczny identyfikator
`
`
`
public class Dept {
private Long id;
private String dname;
Dept.java
public void setId(Long id) { this.id = id; }
public Long getId() { return id; }
public void setDname(String dname) { this.dname = dname; }
public String getDname() { return dname; }
}
11
Odwzorowanie O/R w Hibernate
`
Definiowane w pliku lub plikach XML
`
`
`
`
`
typowo odrębny plik dla każdej klasy
zwyczajowe rozszerzenie .hbm.xml.
hbm xml
Zorientowane na opis odwzorowania z punktu
widzenia klasy Java, a nie tabeli
Tworzone ręcznie lub generowane za pomocą
narzędzi
Pliki odwzorowania wskazywane w pliku
konfiguracyjnym hibernate.cfg.xml lub bezpośrednio
w aplikacji
Przykład odwzorowania O/R
Dept.hbm.xml
1
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping ...>
>
2
3
4
5
<hibernate-mapping package="myhib">
<class name="Dept" table="DEPT">
6
DEPT
------------------------DEPTNO NUMBER PRIMARY KEY
DNAME VARCHAR2(30)
<id name="id" type="long" column="deptno">
<generator class="sequence">
<param name="sequence">dept_seq</param>
</generator>
</id>
<property name="dname" column="dname"
type="string" not-null="true” length=30/>
</class>
</hibernate-mapping>
12
Podstawowe interfejsy Hibernate API
`
SessionFactory
`
`
`
Session
`
`
`
służy do tworzenia obiektów Session
obiekt tworzony raz dla całej aplikacji
jednostka pracy („unit of work”)
obsługuje trwałość obiektów
Transaction
`
`
transakcja w bazie danych
najczęściej jedna w sesji
Hibernate w akcji
2
SessionFactory sf =
new Configuration()
Configuration().configure().buildSessionFactory();
configure() buildSessionFactory();
...
Session s = sf.openSession();
3
Transaction tx = s.beginTransaction();
4
Dept d = new Dept();
// ulotny
d.setDname("MARKETING");
5
6
s save(d);
s.save(d);
7
s.close();
1
// trwały
tx.commit();
13
Stany obiektu w Hibernate
`
Ulotny (ang. transient) (new(), delete(), …)
`
`
Trwały (ang
(ang. persistent) (save(),
(save() persist(),
persist() …))
`
`
`
`
utworzony operatorem new, ale niezwiązany z sesją
posiada identyfikator i reprezentację w bazie danych
związany z sesją
jego stan jest automatycznie synchronizowany z bazą
danych
Odłączony (ang. detached) (update(), …)
`
`
obiekt, który był trwały, ale jego sesja się zakończyła
można go modyfikować, a następnie związać z nową
sesją
Praca z obiektami w Hibernate
`
Uczynienie obiektu trwałym:
`
`
Odczyt obiektu o znanym identyfikatorze:
`
`
metoda delete() obiektu Session
Modyfikacja trwałego obiektu
`
`
metody load() i get() obiektu Session
Usunięcie obiektu:
`
`
metoda save() obiektu Session
metody setXXX() obiektu
S
Synchronizacja
h i
j obiektów
bi któ odłączonych
dł
h
`
metody update(), saveOrUpdate() i merge() obiektu
Session
14
Praca z obiektami - Przykłady
`
Utworzenie i zachowanie obiektu
Dept d = new Dept();
d setDname("MARKETING");
d.setDname(
MARKETING );
Long genId = (Long) session.save(d);
`
Odczyt i modyfikacja obiektu
Dept d = (Dept) session.load(Dept.class, new Long(20));
d.setDname("SALES AND MARKETING");
`
Usunięcie obiektu
Dept d = (Dept) session.load(Dept.class, new Long(20));
session.delete(d);
Zapytania w Hibernate
`
Zapytania w języku HQL (Hibernate Query
Language)
`
`
`
składnia podobna do SQL
zorientowany obiektowo
zapytania odwołują się do klas, a nie tabel
List depts = (List) session.createQuery(
"from Dept as dept where dept.dname = 'SALES'")
.list();
`
`
`
Zapytania
Z
t i w natywnym
t
SQL
Zapytania poprzez obiekty Criteria
Zapytania poprzez obiekty Query By Example
15
Asocjacje w Hibernate
`
`
`
`
1:1, N:1, 1:N, N:M
Z tabelą pośrednią (1:1, N:1, 1:N, N:M)
lub bez (1:1
(1:1, N:1
N:1, 1:N)
Jednokierunkowe lub dwukierunkowe
Możliwość kaskadowej propagacji operacji na
obiekty zależne:
`
none, all, save-update, delete, all-delete-orphan
Przykład asocjacji w Hibernate (1/2)
Dept
Emp
Emp.hbm.xml
Emp.java
public class Emp {
private Long id;
private String ename;
private Dept dept;
...
}
<class name="Emp" table="EMP">
...
<many-to-one name="dept"
column="deptno"
not-null="true"/>
</class>
16
Przykład asocjacji w Hibernate (2/2)
Dept
Emp
Dept.java
public class Dept {
private Long id;
private String dname;
private Set emps;
...
}
Dept.hbm.xml
<class name="Dept" table="DEPT">
...
<set name="emps" inverse="true"
cascade="all">
<key column="deptno"/>
<one-to-many class="Emp"/>
</set>
</class>
Java Persistence
`
Standard dotyczący zapewniania trwałości obiektów
w aplikacjach Java EE i Java SE
`
`
`
Geneza standardu Java Persistence
`
`
`
opracowany razem z EJB 3
stanowi część Java EE 5
niepowodzenie koncepcji encyjnych EJB
sukces technologii O/RM
Rola Java Persistence na tle technologii O/RM
`
`
oparty o odwzorowanie obiektowo-relacyjne
definiuje standardowe API
17
Elementy standardu Java Persistence
`
`
`
Interfejs programistyczny Java Persistence API
Język zapytań Java Persistence Query Language
Metadane o odwzorowaniu obiektowo-relacyjnym
Encje
`
`
`
`
Encja (ang. entity) to lekki obiekt służący do
reprezentacji trwałych danych
Typowo reprezentuje tabelę z relacyjnej bazy danych
Definiowana w formie klasy encji i ewentualnie klas
pomocniczych
Wymagania dla klas encji:
`
`
`
POJO z adnotacją @Entity
bezargumentowy konstruktor (public lub protected)
implementacja Serializable, jeśli obiekty będą odłączane
18
Encja - Przykład
1
2
@Entity
Blad.java
@Table(name="BLEDY")
public class Blad implements Serializable {
4
@Id
private Long id;
private String kod;
private String opis;
5
public Blad() { }
3
public Long getId() { return id; }
public void setId(Long id) { this
this.id
id = id; }
public String getKod() { return kod; }
public void setKod(String kod) { this.kod = kod; }
public String getOpis() { return opis; }
public void setOpis(String opis) { this.opis = opis; }
6
}
Związki między encjami
`
Liczność
`
`
`
`
`
Kierunkowość
`
`
`
1:1 (@OneToOne)
1:N (@OneToMany)
N:1 (@ManyToOne)
N:M (@ManyToMany)
dwukierunkowe
j
jednokierunkowe
Kaskada operacji:
`
PERSIST, MERGE, REMOVE, REFRESH, ALL
19
Związki między encjami - Przykład
Wykonawca
Album
@Entity
public class Wykonawca implements Serializable {
...
@OneToMany(cascade=CascadeType.ALL,
mappedBy="wykonawca")
private Collection<Album> albumy;
... }
@Entity
public class Album implements Serializable {
...
@ManyToOne
private Wykonawca wykonawca;
... }
Zarządca encji (Entity Manager)
`
Zarządca encji zarządzany przez kontener (EJB,
JSF)
`
`
`
@PersistenceContext
wstrzykiwany do
EntityManager em;
komponentu aplikacji
kontekst trwałości propagowany między komponentami w
ramach transakcji JTA
Zarządca encji zarządzany przez aplikację
(serwlety,SE)
`
`
tworzony i niszczony przez aplikację
każdy zarządca encji tworzy odrębny kontekst trwałości
@PersistenceUnit
EntityManagerFactory emf;
EntityManager em = emf.createEntityManager();
20
Jednostka trwałości (Persistence Unit)
`
`
`
`
`
Definiuje zbiór klas encji zarządzanych przez
EntityManager w aplikacji
Obejmuje klasy encji z jednej bazy danych
Definiowana w pliku konfiguracyjnym
persistence.xml
Posiada nazwę unikalną w zasięgu widzialności
W aplikacjach Java EE wykorzystuje źródło danych
`
`
`
obsługujące transakcje JTA
nieobsługujące transakcji JTA
W aplikacjach Java SE zawiera parametry
połączenia JDBC
Plik persistence.xml - Przykład
persistence.xml
1
2
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" ...>
<persistence-unit name="AlbumyJPPU" transaction-type="JTA">
3
<provider>
oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider
</provider>
4
<jta-data-source>jdbc/sample</jta-data-source>
5
<properties>
p p
<property name="toplink.ddl-generation" value="create-tables"/>
</properties>
</persistence-unit>
</persistence>
21
Cykl życia encji
`
`
Instancje encji są zarządzane przez instancję
EntityManager
Stany instancji encji:
`
`
`
`
nowa (ang. new)
zarządzana (ang. managed)
odłączona (ang. detached)
usunięta (ang. removed)
Utrwalanie instancji encji
`
Metoda persist() obiektu EntityManager
@PersistenceContext
EntityManager em;
...
Blad b = new Blad();
b.setKod("b001");
b tO i ("Ni d
b.setOpis("Niedozwolona
l
operacja
j w module
d l X")
X");
em.persist(b);
22
Odczyt, odświeżanie i synchronizacja
instancji encji z bazą danych
`
`
`
`
`
Odczyt poprzez klucz główny: metoda find()
Odświeżenie stanu z bazy danych: metoda refresh()
Modyfikacje instancji: metody setXXX() encji
Synchronizacja instancji odłączonej: metoda merge()
Moment zapisu danych do bazy danych:
`
`
`
automatycznie: gdy transakcja jest zatwierdzana
jawnie: w wyniku wywołania metody flush()
Strategia blokowania danych
`
`
domyślnie blokowanie optymistyczne
możliwość jawnego blokowania metodą lock()
Usuwanie instancji encji
`
Metoda remove() obiektu EntityManager
@PersistenceContext
EntityManager em;
...
Blad b = em.find(Blad.class, new Long(13));
em.remove(b);
23
Transakcje
`
EntityManager zarządzany przez kontener (EJB)
`
`
kontener zarządza transakcjami
E tit M
EntityManager
zarządzany
d
przez aplikację
lik j
`
transakcja JTA
(serwlety)
@Resource
UserTransaction utx;
utx.begin();
...
utx.commit(); // utx.rollback();
`
transakcja na poziomie zasobu (Java SE, serwlety)
EntityManager em;
em.getTransaction().begin();
...
em.getTransaction().commit(); // em.getTransaction().rollback();
Zapytania do bazy danych
`
Rodzaje zapytań (metody obiektu EntityManager)
`
`
`
`
Parametryzacja zapytań
`
`
`
dynamiczne w JPQL - createQuery()
dynamiczne natywne - createNativeQuery()
nazwane (JPQL lub natywne) - createNamedQuery()
nazwane (np. :kodBledu)
pozycyjne (np. ?1)
Wykonanie zapytania (metody obiektu Query)
`
`
getResultList(), getSingleResult()
executeUpdate()
24
Zapytanie dynamiczne - Przykład
EntityManager em;
...
List<Blad> wyn = null;
Query q = em.createQuery(
"SELECT b FROM Blad b WHERE b.opis LIKE '%problem%'");
wyn = q.getResultList();
Zapytanie nazwane - Przykład
Blad.java
@Entity
@NamedQuery(name = "findByKeyword",
query = "SELECT b FROM Blad b WHERE b.opis LIKE :keyword")
public class Blad implements Serializable { ... }
EntityManager em;
...
List<Blad> wyn = null;
wyn = em.createNamedQuery("findByKeyword")
.setParameter("keyword", "%krytyczny%")
.getResultList();
25
Java Persistence Query Language (JPQL)
`
`
`
Umożliwia formułowanie przenaszalnych zapytań,
niezależnych od specyfiki poszczególnych systemów
Zapytania operują na abstrakcyjnym schemacie
obejmującym encje i związki między nimi
Składnia podobna do SQL:
`
`
`
zapytania SELECT-FROM-WHERE-GROUP BY-HAVINGORDER BY
polecenia UPDATE i DELETE dla masowych operacji
modyfikacji
y
j i usuwania: UPDATE-SET-WHERE, DELETEFROM-WHERE
Wyrażenia ścieżkowe do nawigacji do związanych
encji
JPQL - Przykłady
`
Nawigacja do kolekcji powiązanych instancji encji
SELECT DISTINCT w
FROM Wykonawca w, IN(w.albumy) a
SELECT DISTINCT w
FROM Wykonawca w JOIN w.albumy a
`
Wyrażenie ścieżkowe
SELECT a
FROM Album a
WHERE a.wykonawca.nazwa = ‘Mandaryna’
26
Podsumowanie
`
`
`
`
Dostęp do baz danych w aplikacjach języka Java
operujących na złożonym obiektowym modelu
biznesowym
y realizowanyy jest
j
w oparciu
p
o
technologie odwzorowania obiektowo-relacyjnego
(O/RM)
Powstało kilka technologii O/RM, z których
największą popularność zyskał Hibernate
Java Persistence to standard oparty o odwzorowanie
obiektowo-relacyjne,
yj , definiujący
ją y standardowe API
Java Persistence jest wynikiem prac nad EJB 3.0,
ale może być i zakłada się że będzie
wykorzystywany również bez połączenia z EJB
Materiały dodatkowe
`
`
Hibernate, http://www.hibernate.org/
The Java EE 5 Tutorial,
http://java sun com/javaee/5/docs/tutorial/doc/
http://java.sun.com/javaee/5/docs/tutorial/doc/
27

Podobne dokumenty