Hibernate, 1 transakcja to 1 sesja ?!

0

Hej, mam pytanie czy należy (i dlaczego tak/nie) realizować pojedynczą transakcję w obrębie 1 sesji, czyli ma na myśli taką operację:

Session factory = new Configuration().configure().buildSessionFactory();
Session session1 = factory.openSession();


//nowa transakcja
session1.beginTransaction();
Book book1 = new Book("Quo Vadis, "H. Sienkiewicz");
session1.save(book1);
session1.getTransaction().commit();


//nowa transakcja
session1.beginTransaction();
Book book2 = new Book("Potop", "AAAA");
session1.save(book2);
session1.getTransaction().commit();

session1.close();

Czy taki kdo jest poprawny czy powinienem dla każdej transakcji otwierać i zamykać sesje ?

0

W ogóle nie powinieneś ręcznie takich rzeczy robić ;] Nie masz jakiegoś kontenera/serwera aplikacyjnego który zrobi to za ciebie?

0

Kod jest poprawny, 1 secsja moze miec wiele transakcji.

0

@mućka może ale czy powinna? Trzymanie otwartych sesji często kończy się kwiatkami takimi jak n+1 selectów jak jakieś powiązania lazy nagle zaczną być pobierane. Jak sesja jest zamknięta to od razu dostaniesz lazy initialization exception.

0

Nie mnie oceniac czy powinna, nie da sie moim zdaniem ryczaltowo powiedziec tak lub nie, zalezy od kontekstu uzycia. A o tym wiem bardzo niewiele, Ty dokladnie tyle samo ;d. Wiadomo ze sa rozne pulapki, jak np. non-stop rosnacy first level cache w sesji ktory moze kiedystam wybuchnac itp. itd., ale ogolnie Hibernate to jedna wielka pulapka ;d
Pytanie bylo czy jest poprawny - tak, jest.

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