Proper Cache-Nutzung in Spring / Hibernate

Project X besteht aus folgenden Teilen:

ein. Spring Data Repository mit separaten Methoden wie:

@Cacheable(value = "xobjects", unless = "#result == null")
XObject findByParamA(String paramA);

@Cacheable(value = "xobjects", unless = "#result == null")
XObject findByParamB(String paramB);

@CacheEvict("xobjects")
<E extends XObject> E save(E entity);

b. Ruhezustand, der auch "xobjects" -Cache verwendet.

Problem # 1 Da es zwei Möglichkeiten gibt, ein Objekt zum Cache hinzuzufügen, kann es vorkommen, dass dasselbe Objekt zweimal angezeigt wird. Wie kann man das besser lösen? Zum Beispiel mit Schlüssel aus Ergebnisobjekt. Etwas wie

key = "# result.id"

Problem # 2 Ich möchte nicht alle Objekte aus dem Cache entfernen, wenn die Methode "save" aufgerufen wird, bin mir aber nicht sicher, ob die aktuelle Implementierung funktioniert. Die "save" -Methode hat xobject als Eingabe, so dass CacheEvict es als Schlüssel für die Räumung verwendet und nichts, was ich erwarte, passiert. Hier halte ich es für schön, mit Magic Key den gleichen Ansatz wie oben verwenden zu können.

UPDATE # 1 Eigentlich denke ich, mein Vorschlag kann funktionieren, hier ist ein Beispiel -https: //github.com/zhangkaitao/spring4-showcase/blob/master/spring-cache/src/main/java/com/sishuok/spring/service/UserService2.jav Aber ich muss es erst testen. Werden die Ergebnisse später teilen.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage