JPA Lecture2 id 228757 Nieznany

background image

Związki między encjami w

standardzie Java Persistence

Wykład jest oparty na:

[1] JSR-000317 JavaTM Persistence 2.0 ("Specification")

(https://jcp.org/aboutJava/communityprocess/final/jsr317/)

[2] The Java EE 7 Tutorial

(http://docs.oracle.com/javaee/7/tutorial/doc/)

Michał Bleja

background image

Plan

Wprowadzenie do JPA (ang. Java Persistence API)

Charakterystyka klas encji

Odwzorowanie klas encji i ich atrybutów

Rodzaje relacji między encjami

Adnotacje modelujące relacje

background image

Wprowadzenie do Java Persistence API

Mechanizm do zarządzania trwałością w aplikacjach Java

SE oraz Java EE

Realizuje odwzorowanie obiektowo-relacyjne

Pozwala programiście używać dziedzinowego modelu
języka Java w celu zarządzania relacyjnymi bazami

danych

background image

Główne elementy standardu Java Persistence

Java Persistence API

Język zapytań JPQL (Java Persistence Query Language)

Metadane o odwzorowaniu relacyjno-obiektowym

background image

Encje (ang. entities)

Encje reprezentują trwałe dane przechowywane w

relacyjnej bazie danych.

Typowo encje utożsamia się z tabelą a jej wystąpienia

(instancje) reprezentują poszczególne wiersze tabeli

Trwały stan encji jest wyznaczony przez jej pola lub

właściwości

Artefaktem reprezentującym encje jest klasa encji

background image

Przykład encji

@Entity //wskazanie, że rozważana klasa jest encją

public class Employee {

@Id //wskazuje, że pole id składuje trwałą tożsamość

//encji (klucz główny)

private int id;

private String name;

private long sal;

public Employee() {}

public int getId() { return id; }

public void setId(int id) { this.id = id; }

public String getName() { return name; }

public void setName(String name) {

this.name = name; }

public long getSal() { return sal; }

public void setSal(long sal) {this.sal = sal; }

}

background image

Adnotacje trwałości

Dostarczają mechanizmu odwzorowania obiektowo

relacyjnego

Mogą być stosowane na trzech różnych poziomach (klasy,

metody, pola)

Są umieszczane przed kodem źródłowym adnotowanego
artefaktu

Pozwalają odwzorować stan obiektu w bazie danych

Umożliwiają formułowanie zapytań adresujących obiekty

klas encji

background image

Dostęp do stanu encji

Dostęp w oparciu o pola

(ang. field access)

Dostęp w oparciu o właściwości

(ang. property access)

@Entity

public class Employee {

@Id private int id;

private String name;

private long sal;

public Employee() {}

public int getId() {

return id; }

public void setId(int id) {

this.id = id; }

...

}

@Entity

public class Employee {

private int id;

private String name;

private long sal;

public Employee() {}

@Id public int getId()

return id; }

public void setId(int id) {

this.id = id; }

...

}

background image

Odwzorowanie tabeli

Adnotacja @Table pozwala wyspecyfikować tabelę dla
encji

Adnotacja @Column określa odwzorowanie kolumny na trwałą

właściwość lub pole w klasie encji

@Table(name = "EMP")

public class Employee {

@Id

@Column(name="EMP_ID", nullable = false)

private Long empId;

@Column(nullable = false, length = 25)

private String fName;

@Column(nullable = false, length = 35)

private String lName;

@Column(length = 40)

private String address;

}

background image

Związki między encjami

Encje wchodzą ze sobą w związki charakteryzujące się określonymi
cechami (np. kierunkowość, liczebność, istnienie)

Implementacja związku
Encja będąca uczestnikiem związku posiada atrybut, który wskazuje
encję z nią powiązaną.

Kierunkowość

Jeśli tylko jedna encja posiada wskaźnik do drugiej wtedy związek
jest jednokierunkowy

Jeśli encje uczestniczące w związku wskazują na siebie nawzajem
wówczas związek jest dwukierunkowy (rozważa się go jako parę

związków jednokierunkowych)

Employee

Department

Employee

Car

background image

Związki między encjami

Związki dwukierunkowe mają zarówno stronę właścicielską (ang.
owning side) oraz stronę przeciwną (ang. inverse side).

Związki jednokierunkowe mają tylko stronę właścicielską.

Liczebność związku określa ile instancji danej encji może być

powiązanych z iloma wystąpieniami innej encji.

Wyróżniamy następujące rodzaje relacji (odzwierciedlają one nazwy

adnotacji:

Many – to – one

One – to – one

One- to – many

Many – to – Many


*

1

1 1



Employee

Department

Car

Employee

background image

Dwukierunkowa relacja typu One-to-One

strona właścicielska (ang. owning side) –

strona zawierająca klucz obcy

strona przeciwna (ang. inverse side) –
odnosi się do strony właścicielskiej poprzez

element mappedBy

@Entity

public class Employee{

@id private int id;

@OneToOne

//odwzorowanie klucza obcego

@JoinColumn(name=

"CAR

_ID

"

)

private Car car;

}

@Entity

public class Car{

@id private int id;

/* wartością mappedBy jest

nazwa atrybutu w encji

właścicielskiej,który

wskazuje na encje

przeciwną */
@OneToOne(mappedBy=

"car"

)

private Employee emp;

}

background image

Dwukierunkowe relacje typu Many-to-One/One-to-Many

strona właścicielska

strona przeciwna

@Entity

public class Employee{

@id private int id;

@ManyToOne

//odwzorowanie klucza

// obcego

@JoinColumn(name=

"DEPT

_ID

"

)

private Department dept;

}

@Entity

public class Department{

@id private int id;

private String name;
@OneToMany(mappedBy=

"dept"

)

private Collection<Employee>

emps;

}

Strona N związku 1:N/N:1 musi być stroną właścicielską, stąd element

mappedBy nie może być określony na adnotacji ManyToOne

background image

Dwukierunkowa relacje typu Many-to-Many

(każda ze stron może być stroną właścicielską)

@Entity

public class Student{

@id private int sid;

@ManyToMany
@JoinTable(name=

"Student

_Organization

",

joinColumns=@JoinColumn

(name=STUDENTS_SID),

inverse

JoinColumns=@JoinColumn

(name=ORGANIZATIONS_OID))

p

rivate Collection<Organizations> organizations;

}

@Entity

public class Organization{

@id private int oid;

@ManyToMany(

mappedBy=

"

organizations

"

)

p

rivate Collection<Student> students;

}

background image

Jednokierunkowa relacja typu One-to-One

@Entity

public class Employee{

@id private int id;

@OneToOne

@JoinColumn(name="CAR_ID") //odwzorowanie klucza obcego

private Car car;

}

@Entity

public class Car{

@id private int id;

//brak referencji do instancji klasy Employee

}

background image

Jednokierunkowa relacja typu Many-to-One

@Entity

public class Employee{

@id private int id;

@ManyToOne

@JoinColumn(name=

"DEPT

_ID

"

) // odwzorowanie klucza obcego

private Department dept;

}

@Entity

public class Department{

@id private int id;

// brak referncji do kolekcji instancji klasy Employee

}

background image

Jednokierunkowa relacja typu One-to-Many

(domyślne odwzorowanie)

@Entity

public class

Department

{

@id private int id;

@OneToMany

@JoinTable(name=

"Department

_Employee

",

joinColumns=@JoinColumn

(name=DEPARTMENT_ID),

inverse

JoinColumns=@JoinColumn

(name=EMPLOYEE_ID))

private Collection<Employee> emps

;

… }

@Entity

public class Employee{

@id private int id;

// brak referencji do instancji klasy Department

}

background image

Jednokierunkowa relacja typu One-to-Many

(odwzorowanie z użyciem klucza obcego)

@Entity

public class

Department

{

@id private int id;

@OneToMany

@JoinColumn(name=

"DEPT

_ID

"

) // odwzorowanie klucza obcego

private Collection<Employee> emps

;

}

@Entity

public class Employee{

@id private int id;

// brak referencji do instancji klasy Department

}

background image

Jednokierunkowa relacja typu Many-to-Many

@Entity

public class Student{

@id private int sid;

@ManyToMany
@JoinTable(name=

"Student

_Organization

",

joinColumns=@JoinColumn

(name=STUDENTS_SID),

inverse

JoinColumns=@JoinColumn

(name=ORGANIZATIONS_OID))

p

rivate Collection<Organizations> organizations;

}

@Entity

public class Organization{

@id private int oid;

// brak referencji do kolekcji instancji klasy Student

;

}

background image

Podsumowanie

JPA dostarcza siedem typów relacji między encjami (cztery

jednokierunkowe, trzy dwukierunkowe)

Istnienie relacji implikuje zastosowanie odpowiedniej
adnotacji modelującej związek

Adnotacje odzwierciedlają praktykę stosowaną w
modelowaniu schematów relacyjnych

Odwzorowania domyślne upraszczają kod źródłowy


Document Outline


Wyszukiwarka

Podobne podstrony:
lecture05 id 264350 Nieznany
lecture8 id 264393 Nieznany
lecture3 id 264379 Nieznany
lecture7 id 264390 Nieznany
lecture5 id 264383 Nieznany
lecture2 id 264375 Nieznany
lecture4 id 264381 Nieznany
lecture 14 CUSUM and EWMA id 26 Nieznany
lecture 9 robust design id 2643 Nieznany
Abolicja podatkowa id 50334 Nieznany (2)
4 LIDER MENEDZER id 37733 Nieznany (2)
katechezy MB id 233498 Nieznany
metro sciaga id 296943 Nieznany
perf id 354744 Nieznany
interbase id 92028 Nieznany
Mbaku id 289860 Nieznany
Probiotyki antybiotyki id 66316 Nieznany
miedziowanie cz 2 id 113259 Nieznany
LTC1729 id 273494 Nieznany

więcej podobnych podstron