poniedziałek, 8 grudnia 2008

Obiekty Hibernate

Obiekty Hibernate

1. Obiekty sesji

  • Configuration – klasa ta wykorzystywana jest do odczytywania i ustawiania szczegółów implementacyjnych, w Hiberante wykorzystywany jest obiekt tej klasy do utworzenia obiektów typu SessionFactory. Aplikacja posiada jeden obiekt Configuration, który jest wykorzystywany jedynie podczas inicjalizacji.
  • SessionFactory – wykorzystywany jest obiekt tej klasy do tworzenia obiektu Session jeśli zachodzi taka potrzeba. Aplikacja powinna wykorzystywać jeden obiekt Hibernate’a SessionFactory dla każdego osobnego egzemplarza bazy danych. Jest on uzależniony od parametrów konfiguracyjnych Hibernate’a.
  • Session – Za każdym razem gdy aplikacja będzie chciała pracować z bazą danych zostanie utworzony obiekt Session. Aplikacja mam możliwość pobrania obiektu, zmiany niektórych jego własności, a następnie utrwalenia go oraz zamknięcia obiektu Session.

Przykład utworzenia obiektów Hibernate:

SessionFactory sessions =

new Configuration().configure().buildSessionFactory();

Session session = sessions.openSession();

Metoda configure() zwraca egzemplarz obietku Configuration, który może być wykorzystywany do uzyskania egzemplarza Hibernate’a SessionFactory poprzez wywołanie metody buildSessionFactory().

2. Cykl życia obiektu trwałego

Hibernate definiuje tylko 3 stany w cyklu życia obiektu stałego: ulotny (ang. transient), trwały (ang. persistent) i odłączony (ang. detached).

2.1 Obiekty trwałe

Obiekty trwałe istnieją w bazie danych, a ich stan jest synchronizowany z bazą danych na końcu transakcji. Takie obiekty zawsze są związane z obiektem Session. Stan obiektu trafia do bazy w wyniku wykonania operacji takich jak: INSERT, UPDATE, DELETE. Narzędzie Hibernate automatycznie sprawdza, w których obiektach trwałych doszło do zmiany, aby móc później zapisać te dane. Dzięki temu tylko część danych podlega modyfikacji, co pozwala zwiększyć wydajność, przynajmniej w niektórych bazach danych.

2.2 Obiekty odłączone

Obiekty odłączone posiadają swoją reprezentacje w bazie danych ale zmiany w tym obiekcie nie zostaną odzwierciedlone w bazie i na odwrót. Można je stworzyć na dwa sposoby: poprzez zamknięcie sesji z nim powiązanej albo przez usunięcie go z sesji dzięki wywołaniu metody evict(). Są jednak one bardzo użyteczne w momencie gdy chcemy zwrócić obiekt z jednej transakcji do warstwy prezentacji i ponownie użyć go w innej transakcji.

2.3 Obiekty ulotne (przejściowe)

Obiekty ulotne nie są związane z żadnym wierszem bazy danych. Tym samym nie są obsługiwane przez Hibernate. Można je utworzyć przy pomocy operatora new.

3. Metody obiektu Session

· save

Metoda save służy do zmiany obiektu ulotnego w trwały. Metoda save wiąże obiekt z sesją i czyni go trwałym. Obiekt sesji łączy się z bazą danych przy pomocy połączenia JDBC dopiero w momencie zatwierdzenia transakcji .

· update, lock

Metoda update wymusza aktualizację stanu obiektu trwałego w bazie danych. Przy jej pomocy wykonywane jest poleceni UPDATE na bazie danych. Polecenie update wykonuje się na obiektach odłączonych, które można przyłączyć do nowej sesji. Podobnie zachowuje się również polecenia lock. Z tą różnicą że lock wiąże obiekt odłączony z sesją, ale nie wymaga jego aktualizacji w bazie danych.

· saveOrUpdate

Metoda saveOrUpdate powoduje dodanie nowego wiersza w bazie danych jeśli obiekt jest ulotny lub aktualizację jeśli obiekt jest odłączony.

· get

Metoda interfejsu Session służy do pobrania obiektu (np. na podstawie identyfikatora) z bazy danych . Tak powstały obiekt można używać poza transakcją jako obiekt odłączony.

· delete

Metoda delete wywoła polecenie DELETE z SQL ale dopiero w momencie synchronizacji sesji.

...

Źródła: Hibernate w akcji Christian Bauer, Gavin King