Odwzorowania relacyjnoobiektowe Hibernate relacje Projekt wspfinansowany przez Uni
Odwzorowania relacyjno-obiektowe Hibernate relacje Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego
Typy relacji Odwzorowania relacyjno-obiektowe 2 • Reprezentacja relacji przy pomocy pól typu innej encji, bądź też kolekcji encji • Mnogościowy podział relacji – Jeden do jednego – @One. To. One – Jeden do wielu – @One. To. Many – Wiele do jednego – @Many. To. One – Wiele do wielu – @Many. To. Many • Kierunkowy podział relacji – Relacja dwukierunkowa – Relacja jednokierunkowa Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego
Relacje dwukierunkowe Odwzorowania relacyjno-obiektowe • 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 mapped. By • 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 3
@One. To. One Odwzorowania relacyjno-obiektowe public @interface One. To. One { Class target. Entity( ) default void. class; Cascade. Type[] cascade( ) default {}; Fetch. Type fetch( ) default EAGER; boolean optional( ) default true; String mapped. By( ) default ""; } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 4
Odwzorowania relacyjno-obiektowe @Join. Column @Entity public class Uzytkownik implements Serializable { @Id private int id; private String imie; @One. To. One @Join. Column(name="adres_id") private Adres adres; } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 5
Relacje - One. To. One Odwzorowania relacyjno-obiektowe @Entity public class Uzytkownik { @Id private int id; private String imie; @One. To. One @Join. Column(name=”adres_id") private Adres adres; } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 6
Relacje - One. To. One Odwzorowania relacyjno-obiektowe @Entity public class Adres { @Id private int id; private String miasto; private String ulica; @One. To. One(mapped. By="adres") private Uzytkownik uzytkownik; } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 7
@One. To. Many Odwzorowania relacyjno-obiektowe public @interface One. To. Many { Class target. Entity( ) default void. class; Cascade. Type[] cascade( ) default {}; Fetch. Type fetch( ) default LAZY; String mapped. By( ) default ""; } Parametr mapped. By– nazwa pola klasy po drugiej stronie relacji Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 8
@Many. To. Many Odwzorowania relacyjno-obiektowe public @interface Many. To. Many { Class target. Entity( ) default void. class; Cascade. Type[] cascade( ) default {}; Fetch. Type fetch( ) default LAZY; String mapped. By( ) default ""; } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 9
@Many. To. Many - przykład Odwzorowania relacyjno-obiektowe @Entity public class Uzytkownik { @Id private int id; private String imie; @Many. To. Many @Join. Table(name = ”uzy_proj", join. Columns = @Join. Column(name = ”uzytkownik_ID"), inverse. Join. Columns = @Join. Column(name = ”projekt_ID")) private Collection<Projekt> projekty; } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 10
@Order. By (I) Odwzorowania relacyjno-obiektowe • 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 11
@Order. By (II) Odwzorowania relacyjno-obiektowe @Entity public class Uzytkownik { @Id private int id; private String name; @One. To. Many(mapped. By=”uzytkownik") @Order. By(”nazwisko") protected List<Dziecko> dzieci; } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 12
Odwzorowania relacyjno-obiektowe @Join. Table • Parametr name – nazwa tabeli • Parametr join. Columns – kolumna tabeli złączenia, stanowiąca klucz dla encji • Parametr inverse. Join. Columns – 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 13
Operacje kaskadowe Odwzorowania relacyjno-obiektowe • 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 14
Odwzorowania relacyjno-obiektowe 15 Typy operacji kaskadowych (I) • Cascade. Type. PERSIST – włączanie nowej encji do kontekstu • Cascade. Type. MERGE – aktualizacja encji • Cascade. Type. REMOVE – usuwanie encji • Cascade. Type. REFRESH – odświeżanie stanu encji z bazy • Cascade. Type. DETACH – odłączenie kolekcji • Cascade. Type. ALL– wszystkie powyższe Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego
Odwzorowania relacyjno-obiektowe Typy operacji kaskadowych (II) @One. To. Many(cascade = Cascade. Type. ALL) @Cascade(org. hibernate. annotations. Cascade. Type. DELETE_ORPHAN) private List<Ocena> ocena. Lista = new Array. List<Ocena>(); @One. To. Many( orphan. Removal = true ) private List<Ocena> ocena. Lista = new Array. List<Ocena>(); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 16
Ładowanie leniwe Odwzorowania relacyjno-obiektowe 17 • Parametr fetch dla adnotacji relacyjnych – Fetch. Type. EAGER – pobieranie natychmiastowe – domyślne dla @One. To. One i @Many. To. One – Fetch. Type. LAZY – pobieranie opóźnione – domyślne dla @One. To. Many i @Many. To. Many • 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
Odwzorowania relacyjno-obiektowe Inicjalizacja public Uzytkownik get. Uzytkownik(int id) { Uzytkownik uzytkownik = this. get(id); if (uzytkownik != null) { Hibernate. initialize(uzytkownik. get. Projekt()); Hibernate. initialize(uzytkownik. get. Dzieci()); } return uzytkownik; } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 18
@Element. Collection Odwzorowania relacyjno-obiektowe @Element. Collection private List<String> slowa. Kluczowe = new Array. List<String>(); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 19
Przykłady relacji (I) Odwzorowania relacyjno-obiektowe @One. To. One(cascade=Cascade. Type. ALL) @Cascade(org. hibernate. annotations. Cascade. Type. DELETE_ORPHAN) Dane. Serwisowe dane. Serwisowe = new Dane. Serwisowe(); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 20
Przykłady relacji (II) Odwzorowania relacyjno-obiektowe @Many. To. One private Dostawca dostawca; Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 21
Przykłady relacji (III) Odwzorowania relacyjno-obiektowe @Many. To. One private Uzytkownik uzytkownik; @One. To. Many(mapped. By="uzytkownik") @Order. By(clause="identyfikator") private List<Urzadzenie> urzadzenia. Lista = new Array. List<Urzadzenie>(); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 22
Przykłady relacji (IV) Odwzorowania relacyjno-obiektowe @Many. To. One Uzytkownik uzytkownik; @One. To. Many(mapped. By="uzytkownik” cascade=Cascade. Type. ALL) @Cascade(org. hibernate. annotations. Cascade. Type. DELETE_ORPHAN) private List<Adres> adres. Lista = new Array. List<Adres>(); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 23
Przykłady relacji (V) Odwzorowania relacyjno-obiektowe 24 @Many. To. Many Set<Uzytkownik> uzytkownicy = new Hash. Set<Uzytkownik>(); @Many. To. Many(mapped. By = "uzytkownicy") private Set<Grupa> grupy = new Hash. Set<Grupa>(); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego
Przykłady relacji (VI) Odwzorowania relacyjno-obiektowe @Many. To. Many(mapped. By="producent. Lista", cascade=Cascade. Type. ALL) private List<Rodzaj. Sprzetu> rodzaj. Sprzetu. Lista = new Array. List<Rodzaj. Sprzetu>(); @Many. To. Many(cascade=Cascade. Type. ALL) private List<Producent> producent. Lista = new Array. List<Producent>(); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 25
Przykłady relacji (VII) Odwzorowania relacyjno-obiektowe 26 @Many. To. Many List<Umiejetnosc> posiadane. Umiejetnosci. Lista = new Array. List<Umiejetnosc>(); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego
- Slides: 26