[Hibernate] Kilka pytań

0

Hej,

Mam kilka pytań dotyczących obiektów session w Hibernate.

  1. Jak to w końcu jest z tym session .. czy powinien być tworzony niczym tak samo jak transakcja czyli mały request to od razu
    siup otwieramy sesje potem transakcje a potem session.close() ?? Wtedy jak wykorzystać potęgę Hibernate jeżeli chodzi o sprawdzanie zabrudzeń skoro wszystkie referencje które mamy będą w trybie "detached".
    Z drugiej znowu strony , chyba głupim pomysłem jest trzymanie jednej session dla całej aplikacji // chociaż przekonuje troche do tego sam Hibernate udzielając getCurrentSession(), ale mając jeden obiekt session jak wtedy z wielowątkowością.

  2. Co z obiektami session do których straciliśmy referencje bez zamknięcia close()? Bo to kiedy GC usunie to jego sprawa , a session chyba blokuje bazę danych ? Hibernate zapewnia także , że w jednej sesji nie będzie dwóch obiektów trwałych o tej samej tożsamości bazodanowej , a różnych referencjach. Jak uzyskać coś podobnego dla różnych sesji ?

  3. Często używając Hibernate używa się też wzorca DAO. Czy można napisać takie DAO aby było całkowicie przezroczyste dla klienta ? Czy jednak zawsze będzie musiał otwierać ten upiorny session, a później transakcje. Powiedzmy przyklad na klasie User. Chcemy aby klient mógł dodawać userów,deletować i ladnie updatować.

  4. O ile rozumiem pojęcie transakcji bazodanowej ,a co za tym idzie pochodzenie Transaction to obiekty Session są dla mnie strasznie sztuczne i niewygodne w użyciu. Czy może ktoś przedstawić jakiś swój punkt widzenia na temat session ?

0
  1. mozesz zrobic request = sesja, potege hibernate wykorzystasz robiac commita bo wtedy wszystkie zabrodzone rzeczy zostana zrzucone
  2. GC usuwa obiekty na ktore nic nie wskazuje wiec sesje tez, niezamknieta sesja nie blokuje bazy conajwyzej polaczenie. Po co Ci te same obiekty dla roznych sesji ?
    3)DAO moze byc przezroczyste dla klienta, po prostu sam napisze rzeczy odpowiedzialne za otwieranie commity itp a klinetowi daj zwykle metodki insert,update itp
    4)sesja = wiele transakcji bazodanowych
0

ad 1) ad3)
Wtedy po kazdej zmianie klient musi dawać UPDATE() a gdyby byly w jednej sesji to mógłby po prostu zmienić atrybut którymś setterem. , jeżeli po kazdej operacji ma klient dawac update() to jaki jest sens uzywania hibernate który nie sprawdza zabrudzeń ( bo nie ma obiektów trwałych) , wtedy juz wiekszy sens ma zwykle JDBC i klepanie selecetów

0

Co dla Ciebie znaczy klient?

0

@Szczery : klient tj klient mojego "pseudoprzezroczystego DAO"

0

@op

Hibernate - reference manual (rozdzial 10. i 11) i "Hibernate in Action" - Christian Bauer and Gavin King.

1 użytkowników online, w tym zalogowanych: 0, gości: 1