我想在存储库中的save / saveAll方法中添加一个@CacheEvict()
装饰器。
我已尝试通过阅读此thread使用自定义实现来覆盖方法,但我不想重写该方法的实现,只需调用具有更多行为的默认方法即可。所提供的解决方案均不适用于我的情况,或者需要过多的自定义。
@Transactional(readOnly = true)
@Repository
public interface MyRepository extends JpaRepository<MyEntity, Long> {
// This is working fine as its a custom query method
@Cacheable(value = "ENTITIES")
MyEntity findByCategory(String category);
// This isn't working as it won't implement the function correctly. Save don't work anymore here.
@CacheEvict(value = "ENTITIES", key = "#entity.hashCode()")
<S extends MyEntity> S save(S entity);
}
我可以从方法的主体中手动调用缓存逐出,但是我不能仅仅重写save()
方法并调用super.save()
,因为我仅使用接口并让Spring生成实现。 / p>
有什么建议吗?
答案 0 :(得分:0)
找到了。这是假的。 刚刚删除了@Transactional(readOnly = true)。这阻止了保存工作。
因此,仅重写方法的签名就足以添加一些装饰器,而无需关心实现。
@Override
@CacheEvict(value = "ENTITIES", key = "#p0.getKeyWhateverItIs()")
<S extends Feature> S save(S entity);
是的,键值也是错误的,但与无效的save
方法无关。