Marquez
Marquez

Reputation: 6039

Spring Cache Abstraction with multi-value queries

Does Spring Cache abstraction support multi-value queries?

Instead of:

@Cacheable("books") public Book findBook(ISBN isbn) {...}

Imagine a query that goes like this:

@Cacheable("books") public List< Book > findBook(List< ISBN > isbns) {...}

Is this supported? Will it individually cache each book returned in the collection?

Thanks!

Upvotes: 3

Views: 3886

Answers (3)

Koroslak
Koroslak

Reputation: 726

Worked for me. Here's a link to my answer. https://stackoverflow.com/a/60992530/2891027

TL:DR

@Cacheable(cacheNames = "test", key = "#p0")
public List<String> getTestFunction(List<String> someIds) {

My example is with String and not custom object.

Hope it helps at least a bit :)

Upvotes: 0

ragnor
ragnor

Reputation: 2528

Spring Cache stores whole result under single cache key, so it is not possible to store individually each object returned in the collection. In case of caching result of a JPA Query you may use query cache. In other cases if memcached is an option for you, you can try Simple Spring Memcached and ReadThroughMultiCache annotation. It will store each element of the collection individually under dedicated cache key.

Upvotes: 4

Daniel Dinnyes
Daniel Dinnyes

Reputation: 21

The query cache can indeed cache a list of results per query input. Be aware thought, that only the IDs of the returned entities will be saved in the query cache. You have to have the entity cache enabled separately for the returned entity type itself, if you want the properties to be cached too.

Upvotes: 2

Related Questions