Wir verwenden hibernate4 und ehcache in unserem Projekt. Wir arbeiten hauptsächlich an unveränderlichen Objekten, daher ist das Caching ein Feature, das in unsere Anwendung passt. Beim Versuch, den Abfragecache zu aktivieren, ist das folgende Problem aufgetreten:
Angenommen, wir haben die folgende Entität:
%Vor%und die Abfrage:
%Vor%Der Abfragecache timeToLive ist auf etwa 3/4 des Dog timeToLive gesetzt. Hier ist das Szenario (bitte korrigieren Sie mich, wenn ich eine falsche Annahme gemacht habe):
Der 3. Punkt nervt mich. Der Abfragecache wurde ungültig gemacht und in der Datenbank erneut ausgeführt, wobei die Dog-Objekte abgerufen wurden, die Dog-Objekte jedoch nicht im L2-Cache aktualisiert wurden. Es sieht so aus, als ob die Abfrage nur die Hunde-IDs im Abfrage-Cache, nicht aber den L2-Cache aktualisiert hat.
Gibt es eine Möglichkeit, die Abfrage zu zwingen, auch den L2-Cache zu aktualisieren? Vielleicht ist dieses Szenario anders zu behandeln?
Siehe Second Level Cache ist für Object / Pojos, die Sie angeben, um zwischengespeichert zu werden. Der Abfragecache wird jedoch für bestimmte Abfragen erstellt. So scheint es natürlich, dass beide nicht verwandt sind und der Cache der zweiten Ebene nicht aktualisiert wird, wenn der Abfrage-Cache aktualisiert wird. Deshalb gibt es für beide eine andere Konfiguration. Sie können entweder die Hibernate-Dokumentation oder diesen Link oder diesen Link kann dir helfen, Dinge zu verstehen.
In meinem Fall deaktiviere ich die minimale Put-Einstellung im Ruhezustand und dann aktualisiert der Abfrage-Cache jedes Mal automatisch den zugehörigen Cache der zweiten Ebene, wenn SQL ausgegeben wird.
Ich denke, das ist die Lösung für Ihre Frage, "um die Abfrage zu zwingen, auch den L2-Cache zu aktualisieren" (Das behebt mich auch eine lange Zeit .....)
%Vor%