gpt4 book ai didi

java - Spring存储库: @CacheEvict on save methods

转载 作者:行者123 更新时间:2023-12-02 03:57:39 25 4
gpt4 key购买 nike

我想将 @CacheEvict() 装饰器添加到我的存储库中的 save/saveAll 方法中。

我尝试通过阅读此 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() 因为我只使用接口(interface)并让 Spring 生成实现。

有什么建议吗?

最佳答案

找到了。这是假人。刚刚删除了@Transactional(readOnly = true)。它阻止了保存工作。

因此,只需重写方法的签名就足以添加一些装饰器,而无需关心实现。

@Override
@CacheEvict(value = "ENTITIES", key = "#p0.getKeyWhateverItIs()")
<S extends Feature> S save(S entity);

是的,键值也是错误的,但与不工作的 save 方法无关。

关于java - Spring存储库: @CacheEvict on save methods,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56750039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com