2010-05-06 12 views
9

Ich erstelle einen Dienst mit schreibgeschütztem Zugriff auf die Datenbank. Ich habe einen Query-Cache und einen Second-Level-Cache (READ_ONLY-Modus) in Hibernate, um den Dienst zu beschleunigen, da die Tabellen, auf die zugegriffen wird, sich nur selten ändern.Hibernate-Abfragecache wird bei externer Aktualisierung automatisch aktualisiert?

Meine Frage ist, wenn jemand in die DB geht und die Tabellen manuell ändert (d. H. Außerhalb von Hibernate), erkennt der Cache automatisch, dass er gelöscht werden muss? Gibt es ein Zeitlimit für den Cache?

Antwort

7

Nein, der Cache wird die Datenbank nicht durchsuchen, damit Sie sich auf magische Weise aktualisieren, wenn sich die zugrunde liegenden Daten ändern. Änderungen, die nicht durch den L2-Cache erfolgen, werden nicht angezeigt. Wie lange es dauert, bis die Zeit abgelaufen ist usw. hängt von Ihrem Provider und den Standardeinstellungen ab. Es sieht so aus, als ob der Standard ehcache.xml für 2 Minuten ist.

7

Wenn Sie nicht über Hibernate-APIs gehen, um Ihre Änderungen vorzunehmen, wird der Second-Level-Cache nicht benachrichtigt und die Änderungen werden nicht angezeigt. Der übliche Weg, um mit dieser Situation umzugehen, besteht darin, die entsprechenden Objekte aus dem Cache der zweiten Ebene programmatisch zu entfernen, um eine Aktualisierung zu erzwingen. Die SessionFactory bietet Methoden, die dies ermöglichen. Aus dem Abschnitt 19.3. Managing the caches der Dokumentation:

Für die Second-Level-Cache gibt es auf SessionFactory definierten Methoden zur Vertreibung des im Cache gespeicherten Zustandes eines Beispiel ganzer Klasse, Sammlung Instanz oder ganzer Sammlung Rolle.

sessionFactory.evict(Cat.class, catId); //evict a particular Cat 
sessionFactory.evict(Cat.class); //evict all Cats 
sessionFactory.evictCollection("Cat.kittens", catId); //evict a particular 
                 //collection of kittens 
sessionFactory.evictCollection("Cat.kittens"); //evict all kitten collections 
+0

In einer Web-Anwendung, zum Zeitpunkt/basierend auf welchem ​​Zustand, wird dieser Code für Räumung genannt werden? Können Sie bitte ein praktisches Szenario geben? – user104309

Verwandte Themen