2

I want to cache the response of the repository class which has the following methods:

@Cacheable(cacheNames = "books", key="#id")
Book findById(Long Id);

@CacheEvict(cacheNames = "books", key = "#id")
void deleteById(Long id);

@Cacheable(cacheNames = "books", key="#book.id")
Book save(Book book);

@Cacheable("books")
List<Book> findAll();

Except the findAll() method, others are working as expected.

How to make findAll() to populate the books cache with book.id as key?

Andy Wilkinson
  • 108,729
  • 24
  • 257
  • 242
Sri
  • 4,613
  • 2
  • 39
  • 42
  • Possible duplicate of [Spring Cache with collection of items/entities](https://stackoverflow.com/questions/44529029/spring-cache-with-collection-of-items-entities) – Matthias Sep 13 '19 at 09:39

1 Answers1

4

You need to provide a customized CacheManager and Cache implementation for your caching provider (e.g. Ehcache, Redis or Hazelcast).

By default, OOTB, Spring's Cache Abstraction does not split up cached method array/collection type return values into separate entries in the targeted cache. You must handle this yourself.

See my last response for this nearly identical question.

Matthias
  • 7,432
  • 6
  • 55
  • 88
John Blum
  • 7,381
  • 1
  • 20
  • 30
  • 2
    Thanks for the response, it would be better if spring abstraction caching **documentation** has this as a note. – Sri Oct 16 '17 at 02:38