hibernate relacje

26
Odwzorowania relacyjno- obiektowe Hibernate relacje

Upload: samantha-kelly

Post on 02-Jan-2016

37 views

Category:

Documents


0 download

DESCRIPTION

Hibernate relacje. Typy relacji. Reprezentacja relacji przy pomocy pól typu innej encji, bądź też kolekcji encji Mnogościowy podział relacji Jeden do jednego – @OneToOne Jeden do wielu – @OneToMany Wiele do jednego – @ManyToOne Wiele do wielu – @ManyToMany - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Hibernate relacje

Odwzorowania relacyjno-obiektowe

Hibernaterelacje

Page 2: Hibernate relacje

2Odwzorowania relacyjno-obiektowe Typy relacji

• Reprezentacja relacji przy pomocy pól typu innej encji, bądź też kolekcji encji

• Mnogościowy podział relacji– Jeden do jednego – @OneToOne– Jeden do wielu – @OneToMany– Wiele do jednego – @ManyToOne– Wiele do wielu – @ManyToMany

• Kierunkowy podział relacji– Relacja dwukierunkowa – Relacja jednokierunkowa

Page 3: Hibernate relacje

3Odwzorowania relacyjno-obiektowe Relacje dwukierunkowe

• Kierunkowość determinuje możliwość nawigacji między powiązanymi instancjami klas trwałych. Asocjacja dwukierunkowa jest definiowana jako para asocjacji jednokierunkowych, ze wskazaniem jednej z nich jako głównej.

• W przypadku związku dwukierunkowego konieczne jest wskazanie właściciela relacji za pomocą elementu mappedBy

• Dla związków dwukierunkowych trzeba pamiętać, że w celu powiązania instancji dwóch encji ze sobą należy dokonać powiązania dla obu stron związku.

Page 4: Hibernate relacje

4Odwzorowania relacyjno-obiektowe @OneToOne

public @interface OneToOne

{

Class targetEntity( ) default void.class;

CascadeType[] cascade( ) default {};

FetchType fetch( ) default EAGER;

boolean optional( ) default true;

String mappedBy( ) default "";

}

Page 5: Hibernate relacje

5Odwzorowania relacyjno-obiektowe @JoinColumn

@Entity

public class Uzytkownik implements Serializable

{

@Id

private int id;

private String imie;

@OneToOne

@JoinColumn(name="adres_id")

private Adres adres;

}

Page 6: Hibernate relacje

6Odwzorowania relacyjno-obiektowe Relacje - OneToOne

@Entity

public class Uzytkownik

{

@Id

private int id;

private String imie;

@OneToOne

@JoinColumn(name=”adres_id")

private Adres adres;

}

Page 7: Hibernate relacje

7Odwzorowania relacyjno-obiektowe Relacje - OneToOne

@Entity

public class Adres

{

@Id

private int id;

private String miasto;

private String ulica;

@OneToOne(mappedBy="adres")

private Uzytkownik uzytkownik;

}

Page 8: Hibernate relacje

8Odwzorowania relacyjno-obiektowe @OneToMany

public @interface OneToMany

{

Class targetEntity( ) default void.class;

CascadeType[] cascade( ) default {};

FetchType fetch( ) default LAZY;

String mappedBy( ) default "";

}

Parametr mappedBy– nazwa pola klasy po drugiej stronie relacji

Page 9: Hibernate relacje

9Odwzorowania relacyjno-obiektowe @ManyToMany

public @interface ManyToMany{ Class targetEntity( ) default void.class; CascadeType[] cascade( ) default {}; FetchType fetch( ) default LAZY; String mappedBy( ) default "";}

Page 10: Hibernate relacje

10Odwzorowania relacyjno-obiektowe @ManyToMany - przykład

@Entity

public class Uzytkownik {

@Id

private int id;

private String imie;

@ManyToMany

@JoinTable(name = ”uzy_proj", joinColumns = @JoinColumn(name = ”uzytkownik_ID"), inverseJoinColumns = @JoinColumn(name = ”projekt_ID"))

private Collection<Projekt> projekty;

}

Page 11: Hibernate relacje

11Odwzorowania relacyjno-obiektowe @OrderBy (I)

• Kolekcja może zostać uporządkowana według określonych kryteriów

• W przypadku kolekcji uporządkowanej wykorzystać należy typ List

Page 12: Hibernate relacje

12Odwzorowania relacyjno-obiektowe @OrderBy (II)

@Entity

public class Uzytkownik

{

@Id

private int id;

private String name;

@OneToMany(mappedBy=”uzytkownik")

@OrderBy(”nazwisko")

protected List<Dziecko> dzieci;

}

Page 13: Hibernate relacje

13Odwzorowania relacyjno-obiektowe @JoinTable

• Parametr name – nazwa tabeli

• Parametr joinColumns – kolumna tabeli złączenia, stanowiąca klucz dla encji

• Parametr inverseJoinColumns – kolumna tabel złączenia, stanowiąca klucz dla encji po drugiej stronie relacji

Page 14: Hibernate relacje

14Odwzorowania relacyjno-obiektowe Operacje kaskadowe

• Operacje kaskadowe– Definiowane dla relacji w encjach – Automatyczna propagacja operacji w głąb hierarchii

relacji

• Oznacza to, że wszystkie operacje na encji mają powodować wykonanie takiej samej operacji dla powiązanych encji

Page 15: Hibernate relacje

15Odwzorowania relacyjno-obiektowe Typy operacji kaskadowych (I)

• CascadeType.PERSIST – włączanie nowej encji do kontekstu

• CascadeType.MERGE – aktualizacja encji• CascadeType.REMOVE – usuwanie encji• CascadeType.REFRESH – odświeżanie stanu encji

z bazy• CascadeType.DETACH – odłączenie kolekcji• CascadeType.ALL– wszystkie powyższe

Page 16: Hibernate relacje

16Odwzorowania relacyjno-obiektowe Typy operacji kaskadowych (II)

@OneToMany(cascade = CascadeType.ALL)

@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)

private List<Ocena> ocenaLista = new ArrayList<Ocena>();

@OneToMany( orphanRemoval = true )

private List<Ocena> ocenaLista = new ArrayList<Ocena>();

Page 17: Hibernate relacje

17Odwzorowania relacyjno-obiektowe Ładowanie leniwe

• Parametr fetch dla adnotacji relacyjnych

– FetchType.EAGER – pobieranie natychmiastowe – domyślne dla @OneToOne i @ManyToOne

– FetchType.LAZY – pobieranie opóźnione – domyślne dla @OneToMany i @ManyToMany

• Opóźnione pobranie encji jest możliwe jedynie, gdy podstawowa encja jest w stanie managed

• Próba pobrania encji oznaczonej jako LAZY i znajdującej się w stanie Detached spowoduje wyrzucenie wyjątku.

Page 18: Hibernate relacje

18Odwzorowania relacyjno-obiektowe Inicjalizacja

public Uzytkownik getUzytkownik(int id)

{

Uzytkownik uzytkownik = this.get(id);

if (uzytkownik != null)

{

HibernateTemplate.initialize(uzytkownik.getProjekt());

HibernateTemplate.initialize(uzytkownik.getDzieci());

}

return uzytkownik;

}

Page 19: Hibernate relacje

19Odwzorowania relacyjno-obiektowe @ElementCollection

@ElementCollection

private List<String> slowaKluczowe = new ArrayList<String>();

Page 20: Hibernate relacje

20Odwzorowania relacyjno-obiektowe Przykłady relacji (I)

@OneToOne(cascade=CascadeType.ALL)

@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)

DaneSerwisowe daneSerwisowe = new DaneSerwisowe();

Page 21: Hibernate relacje

21Odwzorowania relacyjno-obiektowe Przykłady relacji (II)

@ManyToOne

private Dostawca dostawca;

Page 22: Hibernate relacje

22Odwzorowania relacyjno-obiektowe Przykłady relacji (III)

@ManyToOne

private Uzytkownik uzytkownik;

@OneToMany(mappedBy="uzytkownik")

@OrderBy(clause="identyfikator")

private List<Urzadzenie> urzadzeniaLista = new ArrayList<Urzadzenie>();

Page 23: Hibernate relacje

23Odwzorowania relacyjno-obiektowe Przykłady relacji (IV)

@ManyToOne

Uzytkownik uzytkownik;

@OneToMany(mappedBy="uzytkownik” cascade=CascadeType.ALL)

@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)

private List<Adres> adresLista = new ArrayList<Adres>();

Page 24: Hibernate relacje

24Odwzorowania relacyjno-obiektowe Przykłady relacji (V)

@ManyToMany

Set<Uzytkownik> uzytkownicy = new HashSet<Uzytkownik>();

@ManyToMany(mappedBy = "uzytkownicy")

private Set<Grupa> grupy = new HashSet<Grupa>();

Page 25: Hibernate relacje

25Odwzorowania relacyjno-obiektowe Przykłady relacji (VI)

@ManyToMany(mappedBy="producentLista", cascade=CascadeType.ALL)

private List<RodzajSprzetu> rodzajSprzetuLista = new ArrayList<RodzajSprzetu>();

@ManyToMany(cascade=CascadeType.ALL)

private List<Producent> producentLista = new ArrayList<Producent>();

Page 26: Hibernate relacje

26Odwzorowania relacyjno-obiektowe Przykłady relacji (VII)

@ManyToMany

List<Umiejetnosc> posiadaneUmiejetnosciLista = new ArrayList<Umiejetnosc>();