我正在尝试为我的方法配置缓存,如下所示:
@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)
{
//..
}
为此而驱逐:
@CacheEvict(cacheNames = USER_ENTITY_2_CACHE, key = "#userId", condition = "#userId != null")
不幸的是,当我用相同的userId调用这个方法时,第二个方法的结果是从第一个方法缓存的。这会导致铸造问题和混乱。
java.util.LinkedHashSet cannot be cast to java.util.List
换句话说,当我先调用findenties1,然后调用findenties2时,findenties2不会被调用,而是从缓存中获取,并失败,出现类强制转换异常。如果我以相反的顺序调用它们,同样的工作。
我真正想要的是这两个缓存USER\u ENTITY\u 1\u CACHE,USER\u ENTITY\u 2\u CACHE彼此不了解,并且存储自己的方法调用。
我正在使用RedisCacheManager。
有什么问题吗?