1 / 26

Hibernate relacje

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

Download Presentation

Hibernate relacje

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Hibernaterelacje

  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

  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.

  4. @OneToOne public @interface OneToOne { Class targetEntity( ) default void.class; CascadeType[] cascade( ) default {}; FetchType fetch( ) default EAGER; boolean optional( ) default true; String mappedBy( ) default ""; }

  5. @JoinColumn @Entity public class Uzytkownik implements Serializable { @Id private int id; private String imie; @OneToOne @JoinColumn(name="adres_id") private Adres adres; }

  6. Relacje - OneToOne @Entity public class Uzytkownik { @Id private int id; private String imie; @OneToOne @JoinColumn(name=”adres_id") private Adres adres; }

  7. Relacje - OneToOne @Entity public class Adres { @Id private int id; private String miasto; private String ulica; @OneToOne(mappedBy="adres") private Uzytkownik uzytkownik; }

  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

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

  10. @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; }

  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

  12. @OrderBy (II) @Entity public class Uzytkownik { @Id private int id; private String name; @OneToMany(mappedBy=”uzytkownik") @OrderBy(”nazwisko") protected List<Dziecko> dzieci; }

  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

  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

  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

  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 ) private List<Ocena> ocenaLista = new ArrayList<Ocena>();

  17. Ł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.

  18. Inicjalizacja public Uzytkownik getUzytkownik(int id) { Uzytkownik uzytkownik = this.get(id); if (uzytkownik != null) { HibernateTemplate.initialize(uzytkownik.getProjekt()); HibernateTemplate.initialize(uzytkownik.getDzieci()); } return uzytkownik; }

  19. @ElementCollection @ElementCollection private List<String> slowaKluczowe = new ArrayList<String>();

  20. Przykłady relacji (I) @OneToOne(cascade=CascadeType.ALL) @Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN) DaneSerwisowe daneSerwisowe = new DaneSerwisowe();

  21. Przykłady relacji (II) @ManyToOne private Dostawca dostawca;

  22. Przykłady relacji (III) @ManyToOne private Uzytkownik uzytkownik; @OneToMany(mappedBy="uzytkownik") @OrderBy(clause="identyfikator") private List<Urzadzenie> urzadzeniaLista = new ArrayList<Urzadzenie>();

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

  24. Przykłady relacji (V) @ManyToMany Set<Uzytkownik> uzytkownicy = new HashSet<Uzytkownik>(); @ManyToMany(mappedBy = "uzytkownicy") private Set<Grupa> grupy = new HashSet<Grupa>();

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

  26. Przykłady relacji (VII) @ManyToMany List<Umiejetnosc> posiadaneUmiejetnosciLista = new ArrayList<Umiejetnosc>();

More Related