Ich verwende Spring Cache, wo ich in einer Sammlung von Schlüsseln übergeben, und die Rückkehr ist eine Liste von Entitäten. Ich möchte, dass das Caching-Framework versteht, dass jedes Element in der Rückgabeliste mit dem entsprechenden Code zwischengespeichert werden soll. Im Moment scheint der Schlüssel die ganze Liste zu sein, und wenn ich beim nächsten Anruf einen Schlüssel verpasse, wird er versuchen, die gesamte Sammlung erneut zu laden.Spring Cache mit Sammlung von Elementen
@Override
@Cacheable(value = "countries")
public List<Country> getAll(List<String>codes) {
return countryDao.findAllInCodes(codes);
}
eine andere Möglichkeit ist, dass die Rückkehr eine Karte ist, in ähnlicher Weise möchte ich den Cache für Objekte nur Abfrage intelligent genug sein, die noch nie zuvor abgefragt wurden, auch sie jedes Element mit seinem Schlüssel cachen.
@Override
@Cacheable(value = "countries")
public Map<String,Country> getAllByCode(List<String>codes) {
return countryDao.findAllInCodes(codes);
}
Angenommen, die Land-Klasse wie folgt aussieht:
class Country{
String code;
String fullName;
long id;
... // getters setters constructurs etc..
}
Ist dies möglich mit Frühlings-Cache?
Warum nicht die zweite Ebene des JPA verwenden? Der Spring-Cache ist im Vergleich zu JPA- oder Cache-Bibliotheken als EhCache sehr hilflos und fehleranfällig beim Caching. – davidxxx
@davidxxx so weit ich verstehe, Spring Cache ist nur eine Abstraktion, und EhCache kann die Implementierung darunter sein. Der Unterschied besteht darin, dass keine Caching-Logik über die Annotation hinaus geschrieben werden muss. Wie würde ich den obigen Code mit JPA schreiben? – Charbel