Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
1
Hibernate Klasy 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 Możliwość zdefiniowania nazwy tabeli dzięki Adnotacje dla metod get pól klasy lub zmiennych Każda encja musi posiadać klucz główny. @Id dla klucza głównego
4
Definiowanie klasy trwałej (II)
Pola odpowiadające kolumnom tabeli Opcjonalna określająca nazwę kolumny Adnotacje odpowiedzialne za relacje Pola nie odpowiadające kolumnom w bazie oznaczone
5
@Entity package javax.persistence; @Target(TYPE)
@Retention(RUNTIME) public @interface Entity { String name() default ""; }
6
@Table package javax.persistence; @Target(TYPE) @Retention(RUNTIME)
Table { String name() default ""; String catalog() default ""; String schema() default ""; UniqueConstraint []uniqueConstraints() default {}; }
7
@Basic package javax.persistence; @Target({Method, FIELD})
@Retention(RUNTIME) 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)
Id { }
11
@GeneratedValue @Target({METHOD, FIELD}) @Retention(RUNTIME)
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)
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() private int optLock;
16
Klasy trwałe CREATE TABLE uzytkownik ( id bigint NOT NULL,
@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) )
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 = ”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
Cykl życia (II) 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
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 SessionFactory factory) setSessionFactory(factory); } .....
27
Pobieranie obiektu (I)
public Uzytkownik get(int id) { Uzytkownik u = (Uzytkownik) sessionFactory.getCurrentSession().load(Uzytkownik.class, id); return u; } Uzytkownik u = (Uzytkownik) sessionFactory.getCurrentSession().get(Uzytkownik.class, id);
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");
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()
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.