Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Hibernate relacje.

Podobne prezentacje


Prezentacja na temat: "Hibernate relacje."— Zapis prezentacji:

1 Hibernate relacje

2 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 Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

3 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. Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

4 public @interface OneToOne { Class targetEntity( ) default void.class;
CascadeType[] cascade( ) default {}; FetchType fetch( ) default EAGER; boolean optional( ) default true; String mappedBy( ) default ""; } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

5 @JoinColumn @Entity public class Uzytkownik implements Serializable {
@Id private int id; private String imie; @OneToOne @JoinColumn(name="adres_id") private Adres adres; } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

6 Relacje - OneToOne @Entity public class Uzytkownik { @Id
private int id; private String imie; @OneToOne @JoinColumn(name=”adres_id") private Adres adres; } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

7 Relacje - OneToOne @Entity public class Adres { @Id private int id;
private String miasto; private String ulica; @OneToOne(mappedBy="adres") private Uzytkownik uzytkownik; } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

8 @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 Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

9 public @interface ManyToMany {
Class targetEntity( ) default void.class; CascadeType[] cascade( ) default {}; FetchType fetch( ) default LAZY; String mappedBy( ) default ""; } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

10 @ManyToMany - przykład
@Entity public class Uzytkownik { @Id private int id; private String imie; @ManyToMany @JoinTable(name = ”uzy_proj", joinColumns = ”uzytkownik_ID"), inverseJoinColumns = ”projekt_ID")) private Collection<Projekt> projekty; } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

11 @OrderBy (I) Kolekcja może zostać uporządkowana według określonych kryteriów W przypadku kolekcji uporządkowanej wykorzystać należy typ List Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

12 @OrderBy (II) @Entity public class Uzytkownik { @Id private int id;
private String name; @OneToMany(mappedBy=”uzytkownik") @OrderBy(”nazwisko") protected List<Dziecko> dzieci; } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

13 @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 Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

14 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 Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

15 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 Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

16 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 ) Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

17 Ładowanie leniwe Parametr fetch dla adnotacji relacyjnych
FetchType.EAGER – pobieranie natychmiastowe – domyślne FetchType.LAZY – pobieranie opóźnione – domyślne 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. Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

18 Inicjalizacja public Uzytkownik getUzytkownik(int id) {
Uzytkownik uzytkownik = this.get(id); if (uzytkownik != null) Hibernate.initialize(uzytkownik.getProjekt()); Hibernate.initialize(uzytkownik.getDzieci()); } return uzytkownik; Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

19 @ElementCollection @ElementCollection
private List<String> slowaKluczowe = new ArrayList<String>(); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

20 @OneToOne(cascade=CascadeType.ALL)
Przykłady relacji (I) @OneToOne(cascade=CascadeType.ALL) @Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN) DaneSerwisowe daneSerwisowe = new DaneSerwisowe(); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

21 Przykłady relacji (II)
@ManyToOne private Dostawca dostawca; Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

22 Przykłady relacji (III)
@ManyToOne private Uzytkownik uzytkownik; @OneToMany(mappedBy="uzytkownik") @OrderBy(clause="identyfikator") private List<Urzadzenie> urzadzeniaLista = new ArrayList<Urzadzenie>(); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

23 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>(); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

24 Set<Uzytkownik> uzytkownicy = new HashSet<Uzytkownik>();
Przykłady relacji (V) @ManyToMany Set<Uzytkownik> uzytkownicy = new HashSet<Uzytkownik>(); @ManyToMany(mappedBy = "uzytkownicy") private Set<Grupa> grupy = new HashSet<Grupa>(); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

25 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>(); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

26 Przykłady relacji (VII)
@ManyToMany List<Umiejetnosc> posiadaneUmiejetnosciLista = new ArrayList<Umiejetnosc>(); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego


Pobierz ppt "Hibernate relacje."

Podobne prezentacje


Reklamy Google