Java spring缓存、saveAll更新的正确处理

标签 java spring jpa caching spring-data

因此,我目前尝试在 Spring Boot 应用程序中安全尽可能多地缓存。

老兄,我遇到了令人抓狂的事情。 如何处理 saveAll(实体列表) 方法?

 public List<WorkaroundEntity> saveAll(List<WorkaroundEntity> workaroundEntities) {

此方法保存所有实体,我当前的缓存如下所示:

  /**
    * K=WorkaroundEntity.id   --   Value=WorkaroundEntity
   */
   private static final String CACHE_NAME_WORKAROUNDS = "workarounds";

所以基本上我的 map 有 ID 和实体。 当用户保存所有实体的列表时。从我的角度来看,我只有这个选择:

@CacheEvict(value = CACHE_NAME_WORKAROUNDS, allEntries = true, condition = "#workaroundEntities.size()>=1")
public List<WorkaroundEntity> saveAll(List<WorkaroundEntity> workaroundEntities) {
    return workaroundEntityRepository.saveAll(workaroundEntities);
}

我错了吗?针对此类问题有更好的解决方案吗?

到目前为止,我在方法中使用了这个缓存:

public WorkaroundEntity save(WorkaroundEntity workaroundEntity)
public WorkaroundEntity findById(long id)
public void delete(WorkaroundEntity workaroundEntity) 
public WorkaroundEntity getOne(long id) 

如何处理适用于集合而不是单个实体的方法?

最佳答案

最后,我的答案是同时使用 hibernate 二级缓存和 spring 缓存。我充分利用了这两个词。除此之外,我还创建了额外的内部缓存以减少对数据库的影响。

关于Java spring缓存、saveAll更新的正确处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56139460/

相关文章:

java - 不知道为什么我有这个错误 Exception in thread "main"java.lang.ArrayIndexOutOfBoundsException : 0

java - 为什么这个java计算器给我这个答案?

java - ExecutorService(特别是 ThreadPoolExecutor)线程安全吗?

java - Spring Controller 中的 Autowiring bean注入(inject)

java - 如何在 Spring 中发送和检索参数?

java - 如何使用 Java/JDBC 在 Oracle 数据库中存储长度超过 4000 个字符的字符串?

java - Spring - 动态原型(prototype) Bean

java - 自动生成的实体类出现 Netbeans @JoinColoumns 错误

java - JPA Criteria Query - 如何在两个表上实现联接以在单个查询中获得所需的结果

jpa - 开始 Cassandra - 使用昆德拉?还有什么?