Marcin
Kapusta
iOS
Developer/Software
Developer/Music
Producer
Temat: Zrozumieć sesję w Hibernate [Początkujący]
Witajcie...Mam głównie pytanie teoretyczne i fajnie by było jakby ktoś
umiał odpowiedzieć gdyż nie wiem czy korzystamy z hibernate we
właściwy sposób.
Mamy taką klasę i wykorzystujemy jedną sesję. Kiedy już raz
utworzymy sesję to ją wykorzystujemy, niezależnie od tego jaki
wątek z niej korzysta. Oto klasa.
public class DatabaseDao {
private static SessionFactory sessionFactory;
private static Session session;
public DatabaseDao() {
try {
sessionFactory = new
Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
System.err.println("Initial SessionFactory creation failed." +
ex);
throw new ExceptionInInitializerError(ex);
}
}
public Session getSession(){
//getSessionFactory().getc
if(session == null || !session.isOpen()){
session = getSessionFactory().openSession();
}
return session;
}
private SessionFactory getSessionFactory() {
return sessionFactory;
}
public boolean testConnection(){
try{
return !getSession().connection().isClosed();
}catch(Exception ex){
return false;
}
}
public void dispose(){
if(session != null && session.isOpen()){
session.close();
}
if(sessionFactory != null && !sessionFactory.isClosed()){
sessionFactory.close();
}
}
}
Pytanie jest takie? Czy dobrze robimy? Czy przypadkiem nie powinno
być tak, że sesję tworzymy nową dla każdego requesta, a
następnie ją zamykamy.
Druga sprawa jest taka, że jak wykorzystujemy powyższą klasę w
servlecie, aby dostać się do sesji i wykorzystujemy tą sesję
tak:
Session session = getSession();
Stacja s = (Stacja) session.load(Stacja.class, stacjaId);
To stacja cały czas zwracana jest taka sama. Powiedzmy, że
ładuję stronę, odpala się servlet i pobierane są dane o stacji
z bazy danych. Następnie inną aplikacją modyfikuje wiersz dla tej
stacji i zapisuje zmieny. W bazie mam już zmieniony wiersz. W
przeglądarce daje F5, odświerzam stronę, a tu proszę - cały
czas widzę stare dane tak jakby w ogóle nie było zapytania do
bazy danych.
Jeśli ktoś mógłby mi pomóc będę bardzo wdzięczny. Staram
się zrozumieć ten niby super framework, ale ciężko to przychodzi
i ciągle napotykam na jakieś schody. Z góry dziękuje.