Używam Struts 2 i Hibernate. Mam prostą tabelę z polem Data, która przechowuje informacje o tym, kiedy dana akcja miała miejsce. Ta wartość daty jest wyświetlana w moim jsp. Problem polega na tym, że po aktualizacji przez system hibernacji db, strona jsp nie aktualizuje wartości daty. Jako przykład robocza:Buforowanie hibernacji?
date1 = 22/06/11 15:00:00
date2 = 22/06/11 16:00:00
Kiedy odświeżyć ręcznie (F5) to jest to OK - zmiany wartości daty z date1
do date2
(czyli od 15:00 do 16:00). Ale jeśli będę dalej odświeżać, to jsp będzie pokazywał datę 1 i następną datę 2 i tak dalej. Mam następujących w moim hibernate.cfg:
<property name="hibernate.cache.use_second_level_cache">false</property>
<property name="hibernate.cache.use_query_cache">false</property>
eksperymentowałem z eksmitować Hibernate(), flush(). Próbowałem dodanie scriptlet (tak, wiem - scriptlets są złe praktyki):
<%
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
%>
Jestem nieco zakleszczony tutaj - Każda pomoc mile widziana.
Dzięki Damo
EDIT: Mam klasy DaoEngine, co wszyscy moi DAOs przedłużenia.
public class DaoEngine
{
@SuppressWarnings("unchecked")
private static final ThreadLocal session = new ThreadLocal();
private static final SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
protected DaoEngine()
{
}
@SuppressWarnings("unchecked")
public static Session getSession()
{
Session hibSession = (Session) DaoEngine.session.get();
if (hibSession == null)
{
hibSession = sessionFactory.openSession();
DaoEngine.session.set(hibSession);
}
return hibSession;
}
protected void begin()
{
getSession().beginTransaction();
}
protected void commit()
{
getSession().getTransaction().commit();
}
@SuppressWarnings("unchecked")
protected void rollback()
{
try
{
getSession().getTransaction().rollback();
}
catch (HibernateException e)
{
}
try
{
getSession().close();
}
catch (HibernateException e)
{
}
DaoEngine.session.set(null);
}
@SuppressWarnings("unchecked")
public static void close()
{
getSession().close();
DaoEngine.session.set(null);
}
public void clearAll()
{
getSession().clear();
}
}
Jakiego mechanizmu używasz do zarządzania sesjami hibernacji i zarządzania nimi (lub menedżerami jednostek JPA)? –