Hibernate relacje.

Slides:



Advertisements
Podobne prezentacje
I część 1.
Advertisements

C++ wykład 2 ( ) Klasy i obiekty.
C++ wykład 4 ( ) Przeciążanie operatorów.
Klasa listy jednokierunkowej Przekazywanie parametrów do funkcji
Programowanie obiektowe PO PO - LAB 4 Wojciech Pieprzyca.
Projektowanie bazy danych
Klasy i obiekty.
Hibernate zapytania.
Object-Relational Mapper for PHP
Dziedziczenie. Po co nam dziedziczenie? class osoba { char * imie, char * imie, * nazwisko; * nazwisko;public: void wypisz_imie(); void wypisz_imie();
Odwzorowanie obiektowo-relacyjne
Bazy danych II Instrukcja SELECT Piotr Górczyński 25/08/2001.
Sposoby implementacji asocjacji
Kamil Łącki Dominik Strzelichowski
Implementacja ekstensji klasy
Implementacja asocjacji
Marcin Pamuła Mateusz Stefek
OOP - programowanie zorientowane obiektowo w VB.NET
25/08/ Bazy danych II Piotr Górczyński Instrukcja UPDATE.
KONKURS WIEDZY O SZTUCE
Hibernate Klasy trwałe
Odwzorowania relacyjno-obiektowe Hibernate Tranzakcyjność i bezpieczeństwo danych.
C++ wykład 2 ( ) Klasy i obiekty.
Wykład 8 Wojciech Pieprzyca
Odwzorowania relacyjno-obiektowe Hibernate Klasy trwałe.
Odwzorowania relacyjno-obiektowe Hibernate zapytania.
Projektowanie warstwy serwera DisplayTag. Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu.
Hibernate uzupełnienie
Odwzorowania relacyjno-obiektowe Hibernate Tranzakcyjność i bezpieczeństwo danych.
Projektowanie warstwy serwera Wprowadzenie. Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu.
Język SQL (Structured Query Language) DDL (Data Definition Language)
Bazy Danych II prowadzący: mgr inż. Leszek Siwik
Wprowadzenie do JSP Copyright © Politecnico di Milano September 2003 Translation: Kamil Żyła, Politechnika Lubelska.
Podstawy C# Grupa .NET PO.
PIO 3_2, Zofia Kruczkiewicz1 Wykład 3 – część druga Iteracyjno-rozwojowy cykl oprogramowania 3.
Budowanie tabel i relacji
SQL - Structured Query Language
JAVA c.d.. Instrukcji wyboru SWITCH używamy, jeśli chcemy w zależności od wartości pewnego wyrażenia wykonać jeden z kilku fragmentów kodu. Jest to w.
Java – coś na temat Klas Piotr Rosik
Programowanie obiektowe Wykład 3 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Dariusz Wardowski.
Programowanie obiektowe Wykład 7 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/20 Dariusz Wardowski.
PIO 2_2, Zofia Kruczkiewicz1 Wykład 2 – część druga Iteracyjno-rozwojowy cykl oprogramowania 2.
OCPJP Inner classes.
BJUG_1: Typy Generyczne, Kolekcje
Projektowanie bazy danych
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Marcin nowak, Wojciech baszczyk
Piotr Czapiewski Wydział Informatyki ZUT Wykład 2.
Komendy SQL do pracy z danymi
Informatyka Stosowana – ROK II / III
PROGRAMOWANIE W JAVA Informatyka Stosowana – ROK II / III Laboratoria mgr inż. Krzysztof Bzowski.
Hibernate Podstawy.
Odwzorowania relacyjno-obiektowe Hibernate preselekcja.
Odwzorowania relacyjno-obiektowe Hibernate Podstawy.
Projektowanie bazy danych z użyciem diagramów UML Obiektowe projektowanie relacyjnej bazy danych Paweł Jarecki.
Paweł Starzyk Obiektowe metody projektowania systemów
PIO 3_2, Zofia Kruczkiewicz1 Wykład 3 – część druga Iteracyjno-rozwojowy cykl oprogramowania 3.
Konfiguracja HIBERnate, postgresQL + przykładowa aplikacja
Bazy Danych Wprowadzenie
Object-relational mapping (aka O/RM, ORM, and O/R mapping)
Kolekcje (3) Zbiory. Porównywanie i porządkowanie elementów kolekcji. (c) Krzysztof Barteczko 2014.
Asocjacja,Kompozycja,Agregacja
Implementacja asocjacji (z atrybutami i bez) przy użyciu: referencji (kolekcji referencji) tablic asocjacyjnych przygotował: Kamil Kowalczyk.
Prezentacja programu PowerPoint
InMoST, Java – przykładowa aplikacja Bartosz.Michalik
C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.
(według:
Programowanie obiektowe II
Programowanie Obiektowe – Wykład 2
Zapis prezentacji:

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 Kierunkowy podział relacji Relacja dwukierunkowa Relacja jednokierunkowa Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

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

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

@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

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

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

@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

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

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

@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

@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

@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

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

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

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

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

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

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

@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

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

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

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

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

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

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