1 / 34

Hibernate Klasy trwałe

Hibernate Klasy trwałe. Klasy trwałe. Podstawowym pojęciem w Java Persistence jest encja. Encja to lekki obiekt służący do reprezentacji trwałych danych Klasyczne POJO - (PlainOldJava Objects) Bezargumentowy konstruktor oznaczony jako public lub protected

anahid
Download Presentation

Hibernate Klasy trwałe

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. HibernateKlasy trwałe

  2. Klasy trwałe • Podstawowym pojęciem w Java Persistence jest encja. Encja to lekki obiekt służący do reprezentacji trwałych danych • Klasyczne POJO - (PlainOldJava Objects) • Bezargumentowy konstruktor oznaczony jako public lub protected • Brak oznaczenia final dla klasy, jak i dla pól i metod • Implementacja interfejsu Serializable w przypadku transferu encji

  3. Definiowanie klasy trwałej (I) • Klasa oznaczona adnotacją @Entity • Możliwość zdefiniowania nazwy tabeli dzięki adnotacji @Table • Adnotacje dla metod get pól klasy lub zmiennych • Każda encja musi posiadać klucz główny. • @Id i @GeneratedValue dla klucza głównego

  4. Definiowanie klasy trwałej (II) • Pola odpowiadające kolumnom tabeli • Opcjonalna adnotacja @Column, określająca nazwę kolumny • Adnotacje odpowiedzialne za relacje • Pola nie odpowiadające kolumnom w bazie oznaczone adnotacją @Transient

  5. @Entity package javax.persistence; @Target(TYPE) @Retention(RUNTIME) public @interface Entity { String name() default ""; }

  6. @Table package javax.persistence; @Target(TYPE) @Retention(RUNTIME) public @interface Table { String name() default ""; String catalog() default ""; String schema() default ""; UniqueConstraint []uniqueConstraints() default {}; }

  7. @Basic package javax.persistence; @Target({Method, FIELD}) @Retention(RUNTIME) public @interface Basic { FetchType fetch() default EAGER; boolean optional() default true; }

  8. @Column (I) @Target({Method, FIELD}) @Retention(RUNTIME) public @interface Column { String name() default ""; boolean unique() default false; boolean nullable() default true; boolean insertable() default true; boolean updateable() default true; .....

  9. @Column (II) ..... String columnDefinition() default ""; String table() default ""; int length() default 255; int precision() default 0; int scale() default 0; boolean specified() default true; }

  10. @Id @Target({METHOD, FIELD}) Retention(RUNTIME) public @interface Id { }

  11. @GeneratedValue @Target({METHOD, FIELD}) @Retention(RUNTIME) public @interface GeneratedValue { GenerationType strategy() default AUTO; String generator() default ""; }

  12. Typy generatorów kluczy głównych • IDENTITY – baza danych generuje klucze główne - SERIAL, IDENTITY • SEQUENCE • TABLE – wykorzystanie tabeli do generowania kluczy głównych • IDCLASS • AUTO • MySQL - IDENTITY • Resin - IDENTITY • Postgres - SEQUENCE • Oracle - SEQUENCE

  13. Inne annotacje @Temporal(TemporalType.DATE) //@Temporal(TemporalType.TIMESTAMP) private Date dataUrodzenia; @Enumerated(EnumType.STRING) private Typ typ; @Lob String opisXML;

  14. Ograniczenia @Length(min=, max=) @Max(value=) @Min(value=) @Past @Future @Range(min=, max=) @Size(min=, max=)

  15. @Version @Version() privateint optLock;

  16. @Entity public class Uzytkownik { @Id private Long id; private String imie; public Long getId() {return id;} private void setId(Long id) {this.id = id;} public String getImie() {return imie;} public void setImie(String imie) { this.imie = imie;} } CREATE TABLE uzytkownik ( id bigint NOT NULL, imie character varying(255), CONSTRAINT uzytkownik_pkey PRIMARY KEY (id) ) Klasy trwałe

  17. Przykładowy obiekt domenowy (I) @Entity public class Uzytkownik { @GeneratedValue(generator = "Uzytkownik_SEQUENCE") @Id @SequenceGenerator(name = "Uzytkownik_SEQUENCE", sequenceName = "Uzytkownik_SEQ") private int id; private String nazwisko=""; private String imie=""; private String telefon=""; ....

  18. Przykładowy obiekt domenowy (II) ........ private String login = ""; private String haslo = ""; @Transient private String pokoj_id="0"; @ManyToOne @JoinColumn(name = "pokoj_id") private Pokoj pokoj; .....

  19. Przykładowy obiekt domenowy (III) @Column(nullable = false) @Min(0) @Max(999) private Integer numerPracowniczy; @Column(nullable = false, scale = 2) private Float wzrost; @Column(length = 1000) private String opis; ....... }

  20. Unikalność danych @Column(unique = true, length = 20) private String login; @Table( name=”spotkania", uniqueConstraints = {@UniqueConstraint(columnNames={”miesiac", ”dzien"})} )

  21. Cykl życia (I) • W pewnych sytuacjach synchronizacja stanu obiektów z bazą danych może nastąpić przed wykonaniem pewnych zapytań, aby zapewnić spójność odczytu. • Hibernate posiada mechanizm umożliwiający określenie, które obiekty zostały zmodyfikowane w ramach transakcji. Mechanizm ten powoduje, że synchronizacji są poddawane tylko obiekty zmodyfikowane. W Hibernate mechanizm ten nazywa się automatic dirty checking. • Cecha transparent transaction-level write-behind odpowiada ze synchronizacje stanu obiektu z bazą danych, aby odbywała się ona najpóźniej jak to jest tylko możliwe.

  22. Hibernate synchronizuje sesje w następujących przypadkach: Przed wykonaniem pewnych zapytań. W celu zachowania spójności transakcji Przy zatwierdzaniu transakcji W przypadku jawnego wywołania metody flush() Kolejność wykonywania operacji przy synchronizacji: Zapis wszystkich obiektów, w kolejności w jakiej były wywołane metody save() Aktualizacja wszystkich obiektów Dodanie , aktualizacja, usunięcie obiektów z kolekcji Usunięcie obiektów Cykl życia (II)

  23. Cykl życia (III) • Nowy (new) – obiekt utworzony, jednak nie włączony do żadnego trwałego kontekstu • Zarządzany (managed) – obiekt utworzony i włączony do kontekstu przy pomocy menadżera encji, posiada klucz główny • Oddzielony (detached) – obiekt posiada klucz główny, jednak nie jest obecnie skojarzony z żadnym kontekstem • Usunięty (removed) – obiekt posiada klucz główny, jest skojarzony z trwałym kontekstem i został wskazany do usunięcia z bazy danych

  24. Cykl życia (IV)

  25. Klasa DAO (I) @Repository public class UzytkownikDAOImpl implements UzytkownikDAO { @Autowired protected SessionFactory sessionFactory; ......

  26. Klasa DAO (II) public class UzytkownikDAOImpl extends HibernateDaoSupport implements UzytkownikDAO { public void setHibernateSessionFactory(@Qualifier("hibernateSessionFactory") SessionFactory factory) { setSessionFactory(factory); } .....

  27. Pobieranie obiektu (I) public Uzytkownik get(int id) { Uzytkownik u = (Uzytkownik) sessionFactory.getCurrentSession().load(Uzytkownik.class, id); return u; } public Uzytkownik get(int id) { Uzytkownik u = (Uzytkownik) sessionFactory.getCurrentSession().get(Uzytkownik.class, id); return u; }

  28. Pobieranie obiektu (II) public Uzytkownik get(int id) { Uzytkownik u = null; u = (Uzytkownik) getHibernateTemplate().load(Uzytkownik.class, id); return u; } public ArrayList<Uzytkownik> findAll() { ArrayList<Uzytkownik> u = (ArrayList<Uzytkownik>) getHibernateTemplate().find("from Uzytkownik"); return u; }

  29. Pobieranie obiektu (III) public ArrayList<Uzytkownik> findByPokojId(int id) { ArrayList<Uzytkownik> u = (ArrayList<Uzytkownik>) getHibernateTemplate().find("from Uzytkownik where pokoj_id = ?", id); return u; } public Uzytkownik findByLogin(String login) { ArrayList<Uzytkownik> u = (ArrayList<Uzytkownik>) getHibernateTemplate().find("from Uzytkownik where login = ?", login); if ( u==null || u.isEmpty()) return null; return u.get(0); }

  30. Pobieranie obiektu (IV) public Uzytkownik getUzytkownikDoEdycji(int id) { Uzytkownik uzytkownik = this.get(id); if (uzytkownik != null) { getHibernateTemplate().initialize(uzytkownik.getDzieciLista()); } return uzytkownik; }

  31. Zapisywanie obiektu public void persist(Uzytkownik u) { sessionFactory.getCurrentSession().persist(u); } public void save(Uzytkownik u) { sessionFactory.getCurrentSession().save(u); }

  32. Edycja obiektu public void update(Uzytkownik u) { sessionFactory.getCurrentSession().update(u); } public void saveOrUpdate(Uzytkownik u) { sessionFactory.getCurrentSession().saveOrUpdate(u); } public final void refresh(Uzytkownik u) { sessionFactory.getCurrentSession().refresh(u); }

  33. Usuwanie obiektu public void delete(Uzytkownik u) { sessionFactory.getCurrentSession().delete(u); }

  34. Pobieranie obiektu session getSession() getHibernateTemplate().getSessionFactory(). getCurrentSession()

More Related