Я пытаюсь настроить кэширование для моих методов следующим образом:
@Cacheable(value = USER_ENTITY_1_CACHE, key = "#userId")
public List<MyEntity1> findEntities1(Long userId) {
//...
}
И:
@Cacheable(value = USER_ENTITY_2_CACHE, key = "#userId")
public Set<MyEntity2> findEntities2(Long userId)
{
//..
}
@Cacheable(value = USER_ENTITY_2_CACHE, key = "#userId")
public Set<MyEntity2> findEntities2(Long userId, boolean deleted)
{
//..
}
И Evict для этого:
@CacheEvict(cacheNames = USER_ENTITY_2_CACHE, key = "#userId", condition = "#userId != null")
К сожалениюКогда я вызываю любой из этого метода с тем же userId, результат для второго кэшируется из первого метода.Это приводит к проблемам приведения и путанице.
Например,
java.util.LinkedHashSet cannot be cast to java.util.List
Другими словами, когда я вызываю findEntities1, а затем findEntities2, findEntities2 не вызывается, а берется из кеша и завершается ошибкой.с исключением класса.Та же работа, если я вызываю их в обратном порядке.Я действительно хочу, чтобы эти два кэша USER_ENTITY_1_CACHE, USER_ENTITY_2_CACHE не знали друг о друге и сохраняли свои собственные вызовы методов.
Я использую RedisCacheManager.
Есть идеи, что здесь может быть не так?