Auch ich nage an einem ähnlichen Problem und poste deshalb direkt mal in diesen Thread hinein:
Ich arbeite an einer Web-Anwendung, die auf einem Tomcat Server läuft und über Hibernate auf eine Oracle 9 DB zugreift.
Mittlerweile habe ich auch alles soweit implementiert, dass es wundervoll funktioniert, allerdings habe ich noch Probleme mit dem Caching/Commit.
Ich lege in meiner Anwendung neue Objekte an bzw. modifiziere die alten. Dies geschiet jeweils transaktionsbasiert, es bekommt also jedes SELECT und jedes INSERT/UPDATE eine eigene Transaktion, die auch per commit() oder im Fehlerfall per rollback() beendet wird.
Nun wird aber bei mehrmaligen Aufruf z.B. der Übersichtsseite (die eine Liste der Objekte enthält) nur bedingt der aktuelle Status der Objekte angezeigt.
Vielmehr werden durch aktualisieren der Seite in scheinbar willkürlicher Reihenfolge die bisher durchgeführten Transaktionen mal berücksichtigt und dann wieder nicht.
Die Ausgabe des Abfrage-Strings in der Eclipse-Console zeigt mir auch, dass die Abfragen nicht jedes mal ausgeführt werden, sondern offenbar teilweise auf den Cache zurück gegriffen wird.
Zum Teil werden auch nur einige Objekte der Liste neu abgefragt, die anderen bleiben bestehen.
In der Datenbank werden die Einträge alle sofort und korrekt vorgenommen.
Wie bringe ich Hibernate bei, meine Liste jedes Mal korrekt aus der DB zu laden?
Hier der Code meiner Liste (auszugsweise):
Code:
<% try {
net.sf.hibernate.Session hibsession = HibernateUtil.currentSession();
Transaction tx = hibsession.beginTransaction();
hibsession.flush();
Iterator it_me = hibsession.createQuery("from ChangeRequest order by Id").list().iterator();
while(it_me.hasNext()) {
ChangeRequest me = (ChangeRequest) it_me.next();
CrHistorie Akt = me.getAktuell();
%> <!-- Cr.Id = <%= me.getId() %> -->
<%= Akt.getId().getDatum() %>
<%= me.getTitel() %>
<%= me.getBeschreibung() %>
<% }
tx.commit();
} catch (Exception e) { %>
<h1><font color="red">Fehler beim Laden der Liste</font></h1>
<%
System.err.println("Fehler: " + e);
} %>