我正在尝试使用spring的@Cacheable进行缓存。我也在使用spring mongodb。我不断收到以下错误:
java.lang.IllegalArgumentException: Null key returned for cache operation (maybe you are using named params on classes without debug info?) CacheableOperation[public abstract test.models.User test.repositories.UserRepository.findById(java.lang.String)] caches=[userById] | key='#id' | keyGenerator='' | cacheManager='' | cacheResolver='' | condition='' | unless=''
这是我正在使用的代码。似乎无论我使用“#id”还是“id”,它似乎都不起作用。要么我得到 IllegalArgumentException,要么它抱怨 id 可能不公开,但我想在我的 User 模型中将“id”保持为私有。
public interface UserRepository extends MongoRepository<User, String> {
@Override
@CacheEvict(value="byId", key="#entity.id")
<S extends User> S save(S entity);
@Cacheable(value="byId", key="#id")
User findById(String id);
public User findByUsername(String username);
}
有人可以指出我做错了什么吗?本质上,我想在redis中缓存用户下的所有“用户”,但以用户“id”作为键进行缓存。然后,我还想在保存用户时基于相同的 id 驱逐。