hibernate relacje

Post on 02-Jan-2016

38 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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

Odwzorowania relacyjno-obiektowe

Hibernaterelacje

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

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.

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 "";

}

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;

}

6Odwzorowania relacyjno-obiektowe Relacje - OneToOne

@Entity

public class Uzytkownik

{

@Id

private int id;

private String imie;

@OneToOne

@JoinColumn(name=”adres_id")

private Adres adres;

}

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;

}

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

9Odwzorowania relacyjno-obiektowe @ManyToMany

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

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;

}

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

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;

}

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

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

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

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>();

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.

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;

}

19Odwzorowania relacyjno-obiektowe @ElementCollection

@ElementCollection

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

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

@OneToOne(cascade=CascadeType.ALL)

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

DaneSerwisowe daneSerwisowe = new DaneSerwisowe();

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

@ManyToOne

private Dostawca dostawca;

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

@ManyToOne

private Uzytkownik uzytkownik;

@OneToMany(mappedBy="uzytkownik")

@OrderBy(clause="identyfikator")

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

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>();

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

@ManyToMany

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

@ManyToMany(mappedBy = "uzytkownicy")

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

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>();

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

@ManyToMany

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

top related