J'utilise Spring Cache, où je passe dans une collection de clés, et le retour est une liste d'entités. Je voudrais que le cadre de mise en cache comprenne que chaque élément de la liste de retour doit être mis en cache avec le code correspondant. Pour l'instant, il semble que la clé soit la liste entière, et si une clé me manque dans l'appel suivant, elle va essayer de recharger toute la collection.Spring Cache avec la collection d'éléments/entités
@Override
@Cacheable(value = "countries")
public List<Country> getAll(List<String>codes) {
return countryDao.findAllInCodes(codes);
}
Une autre possibilité est que le retour est une carte, de même je voudrais que le cache soit assez intelligent pour ne demande pour les articles qui ont jamais été interrogés avant, aussi de les mettre en cache chaque élément avec sa clé.
@Override
@Cacheable(value = "countries")
public Map<String,Country> getAllByCode(List<String>codes) {
return countryDao.findAllInCodes(codes);
}
On suppose la classe pays ressemble à ceci:
class Country{
String code;
String fullName;
long id;
... // getters setters constructurs etc..
}
Est-ce possible avec Spring Cache?
Pourquoi ne pas utiliser le deuxième niveau de JPA? Le cache de printemps est vraiment impuissant et les erreurs sont susceptibles d'être utilisées pour la mise en cache par rapport à la bibliothèque JPA ou Cache comme EhCache. – davidxxx
@davidxxx autant que je sache, Spring Cache est juste une abstraction, et EhCache peut être l'implémentation ci-dessous. La différence est qu'il supprime le besoin d'écrire toute logique de mise en cache au-delà de l'annotation. Comment écrirais-je le code ci-dessus avec JPA? – Charbel