2012-04-10 10 views
0

Wenn ich ein neues Objekt hinzufüge und .save() gehe, führe dann ein select aus, das letzte erstellte Objekt, wird aus den Klassen geholt, und nicht die DB, was bedeutet, dass eine date Eigenschaft hasn ' Ich bin in das SQL-Format konvertiert worden und habe irgendeinen Frontend-Code von mir gefunden.Ruhezustand, erzwinge Objekte aus Datenbank holen

z.B

Tue Feb 06, 2012 statt 2012-02-06 00:00:00

Gibt es eine Möglichkeit, um sicherzustellen, alle meine Objekte erhalten aus der Datenbank gezogen?

Dank

+0

Verwenden Sie einen beliebigen Cache-Typ zum Abrufen von Objekten? –

Antwort

2

Hibernate hat ein paar Ebenen von Cache. Was Sie erleben, ist der Cache der Sitzung/der ersten Ebene. Es gibt keine Möglichkeit, das zu deaktivieren. Aber Sie können mit einer StatelessSession http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/batch.html Section 15.3 nachsehen, wenn Sie darauf bestehen, so etwas zu tun.

Ich rate Ihnen, Ihre Trennung von Benutzerschnittstelle, Geschäftslogik und Persistenzschicht zu überdenken, wenn Sie sich darauf verlassen, dass die Datenbank korrekt formatierte Datumszeichenfolgen an Ihre Benutzer zurückgibt. Es sollte Ihnen egal sein, wie die Datenbank oder der Ruhezustand Zeichenfolgen bildet, solange Sie die Daten, die Sie speichern/abrufen, verstehen können. Untersuchen Sie MVC, MVVM oder andere Trennungsmuster.

+0

Ok ich höre dich, also habe ich eine MVC-Architektur, und die angezeigten Daten sind auf einer komplett separaten Seitenanforderung, nachdem die Einfügung stattgefunden hat, weshalb ich nicht erwartet habe, dass dies passiert. Ich benutze eine automatisierte DTO-Klasse, die die Objektwerte im JSON-Format an meine JS zurücksendet, die dann das Datum verarbeitet, ruft automatisch den getDate-Accessor auf, der, wie ich vermute, die Date.toString() -Methode aufruft, weshalb ich Ich bekomme das Standardformat zurück. also muss ich das Datum überschreiben waa – Baconbeastnz

0

Standardmäßig wird Ihr get() oder load zuerst aus dem Cache lesen und dann zur Datenbank gehen, wenn sie nicht in der Datenbank gefunden wird. Auf dem es auch zum Cache hinzugefügt wird. Sie benötigen session.get() mit appropoite LockMode. Nicht der Standard LockMode.NONE.

Plus Ich glaube, es erfordert flush() auch zwischen save() und get(), um sicherzustellen, dass die Sicherungsoperation mit der Datenbank synchronisiert wurde.

+0

Gehe ich das falsch herum, dachte ich, ich würde die Sitzung für den Zeitraum der Webseite offen lassen, ich schätze es wird dann nie geschlossen. Soll ich es für jede Transaktion öffnen und schließen? – Baconbeastnz

+0

Richtig O Ich habe das behoben, jedes Mal, wenn ich ein Objekt festlege, schließe ich einfach die Sitzung, und jedes Mal, wenn ich die DB auswähle, bekomme ich eine neue Sitzung. – Baconbeastnz

+0

Froh, dass es ein bisschen geholfen hat. –

Verwandte Themen