Wir verwenden Hibernate 3.5.6 zusammen mit Hazelcast 3.6.1 als 2nd Level Cache. Wir haben das folgende Problem. Wir haben eine Hibernate-Entität mit einer nicht faulen Sammlung. Beim Hinzufügen von Elementen zur Sammlung in zwei aufeinanderfolgenden Sitzungen auf demselben Knoten wird die gesamte Sammlung immer von der Datenbank neu geladen. Ich hätte erwartet, dass der Cache der zweiten Ebene einfach aktualisiert werden könnte, wenn ein Element der Sammlung hinzugefügt wird, anstatt es vollständig aus dem Cache zu entfernen und jedes Mal neu zu laden, um einen weiteren Eintrag hinzuzufügen. Ist dies ein prinzipielles Problem des Hibernate-2nd-Level-Caches oder ist dies ein Konfigurationsproblem auf unserer Seite?Update 2nd Level Cache statt Invalidating
Antwort
Ich denke, ich kann die Frage selbst beantworten. In der Tat wird Hibernate nicht die Sammlung aktualisieren, aber immer ungültig machen. Ich habe die folgende Erklärung hier gefunden: http://planet.jboss.org/post/collection_caching_in_the_hibernate_second_level_cache:
Was sind die Caching-Semantik? Nun, der Schlüssel ist, dass Sammlungen niemals im Cache aktualisiert werden; Sie werden nur aus dem Cache ungültig gemacht und später möglicherweise erneut als Ergebnis eines anderen Datenbanklesevorgangs zwischengespeichert. Wenn eine Anwendung namens Group.addMember() aufgerufen wird, wird Hibernate die Mitgliedschaftsgruppe dieser Gruppe aus dem Cache entfernen. Wenn JBoss Cache die Cache-Implementierung der zweiten Ebene ist, wird diese Entfernung im Cluster verteilt. Die Sammlung wird auf allen Knoten im Cluster aus dem Cache entfernt.
Wenn die Anwendung später auf die Mitglieder dieser Gruppe zugreifen muss, wird eine andere Datenbank gelesen, und die aktuellen Primärschlüssel für die Mitglieder werden in den Cache gestellt.
Der Ruhezustand-Cache ist standardmäßig auf PK festgelegt. Wenn Sie also findAll() verwenden, wird der Ruhezustand-Cache nicht verwendet, wenn Sie eine findOne (id) ausführen.
Wenn Sie findAll() zwischenspeichern möchten, würde ich ehcache und @Cache annoations verwenden, seien Sie vorsichtig, welchen Schlüssel es für seinen Cache verwendet. Siehe http://www.ehcache.org/documentation/2.8/get-started/key-classes-methods.html
Das Problem, das wir haben, ist, dass wir ein Element hinzufügen möchten die Sammlung tion. Hibernate lädt immer die gesamte Sammlung, um ein Element hinzuzufügen. Das Problem ist jetzt, dass wenn die Sammlung nicht aus dem Cache der 2. Ebene geladen werden kann (was ich in unserem Fall nicht verstehe), wird immer die Datenbank abgefragt, um die gesamte Sammlung zu laden. –
@JanSchaefer richtig, Sie müssen diesen Cache selbst übernehmen. Ich bin froh, dass ich mich als falsch erwiesen habe, aber ich habe genau das selbe Problem wie du oft durchgemacht. –
- 1. Hibernate 2nd level cache
- 2. Clear Hibernate 2nd-Level-Cache nach manuellem DB-Update
- 3. Manipulieren des Ruhezustands 2nd Level Cache
- 4. NHibernate 2nd Level Cache Provider Unterschiede
- 5. Dynamisches Modell mit 2nd Level Cache in Hibernate
- 6. Hibernate 2nd Level Caching scheint nicht zu funktionieren
- 7. Hibernate 2nd level Cache Ungültigkeit, wenn ein anderer Prozess die Datenbank ändert
- 8. Verteilte Cache mit Hibernate 2rd Level Räumung
- 9. Apache-Ignite-Integration als 2nd-Level-Cache des Hibernate nicht gestartet?
- 10. Apache-Ignite Integration als Hibernate 2nd Level Cache, versteht es Annotationen?
- 11. Mit Ignite for Hibernate 2nd level Cache mit S3-Erkennung werden keine Änderungen durchgeführt
- 12. Doktrin: Second Level Cache
- 13. CXF 3-Level-Cache
- 14. GraphRepository Finde Methode auf der 2nd Level Beziehung
- 15. Contain nicht 2nd Level-Modell auswählen, mit HABTM & hasMany
- 16. Third-Level-Cache für NHibernate
- 17. Doctrine Second Level Cache mit Redis
- 18. Hibernate Second-Level-Cache leert sich selbst
- 19. Probleme mit Request.QueryString. Liest Cache statt URL
- 20. ersetzen statt update
- 21. Was wird im Second-Level-Cache zwischengespeichert?
- 22. Ruhezustand des Second-Level-Cache in orm.xml?
- 23. Hibernate-Second-Level-Cache und ON DELETE CASCADE im Datenbankschema
- 24. Solr hierarchische Facetten: Wie bekomme ich alle 2nd-Level-Werte für die oberen N 1st-Level-Werte
- 25. Apache-Ignite Integration als Hibernate Second-Level-Cache-Breaking?
- 26. So löschen Sie den gesamten Second-Level-Cache in NHibernate
- 27. Wie verwende ich Hibernate Second-Level-Cache mit JPA?
- 28. So berechnen Sie effektive CPI für einen 3-Level-Cache
- 29. Spring Boot + JPA2 + Hibernate - Aktivieren Sie den Second Level Cache
- 30. Hibernate + Ehcache Second-Level-Cache-Miss in einfachen Beispiel
Dies kann mit der Kapazität des Caches zusammenhängen. Hast du das überprüft? –
ich die Konfiguration entsprechend geändert, aber es hat nicht das Verhalten ändern –