2017-05-29 5 views
1

Meine Cache-Konfiguration für die Klasse Mitarbeiter in XMlauf Klassenebene Ehcache und Abfrage nicht

<cache name="com.model.Employee" 
      maxEntriesLocalHeap="100" overflowToDisk="false" statistics="true" /> 

<cache name="employees" maxEntriesLocalHeap="1000" overflowToDisk="false" timeToLiveSeconds="60" statistics="true" /> 

Mit Abfrage-Cache synchronisiert zu werden, die Mitarbeiter zum Beispiel

@QueryHints({@QueryHint(name = "org.hibernate.cacheable", value = "true"), @QueryHint(name="org.hibernate.cacheRegion", value="employees")}) 
    List<Employee> findAll(); 

Zwei-Anwendungen verwenden die gleiche Datenbank holen A & B, Wenn eine Anwendung die Mitarbeiter-ID 8 löscht, aber gleichzeitig Anwendung B mit dieser zwischengespeicherten ID von 8.

Mit der aktuellen con Abbildung kann das Mitarbeiterobjekt in Anwendung B null erhalten.

Irgendwelche Tipps dieses Problem zu beheben, oder die aktuelle Konfiguration

Antwort

1

, dass das Konzept eines Cache ist zu verbessern. Sie haben zwei Möglichkeiten:

  • Wie mit einem wenig abgestanden Wert (und konfigurieren Ablauf für wie abgestanden Sie unterstützen)
  • Evict aus dem Cache, wenn ein Wert

Von sehr weit in meinem Gedächtnis veraltete , Hibernate macht das standardmäßig. Aber das könnte sich ändern. Sie werden alle Abfragen, die sich auf eine aktualisierte Tabelle beziehen, aus dem Cache entfernen. Wie auch immer, das ist die Art von Verhalten, die du zu haben scheinst.

Aber dann sprechen Sie über zwei Anwendungen. Wenn ich annehme, dass sie ihren Cache nicht teilen, dann ... sollten sie. Andernfalls können Sie den Cache der anderen Anwendung nicht löschen. Also müssen Sie die Cache-Kommunikation/Replikation im Cache speichern.

Verwandte Themen