java - hibernate 二级缓存逐出特定实体

标签 java spring hibernate

我有一个使用休眠二级缓存进行缓存的实体。我想在使用特定方法后从缓存中逐出(或刷新)特定实体。怎么做 ?

公司名称:

@Entity
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Company implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @NotNull
    private Boolean hidden;

    @OneToMany(mappedBy = "company", fetch = FetchType.EAGER)
    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
    private Set<Treatment> treatments = new HashSet<>();

    ...
}


方法 :

// @CacheEvict(value = "com.bloombooking.app.domain.Company", allEntries = true) -> Works but evict all entries
@CacheEvict(value = "com.bloombooking.app.domain.Company", key = "#treatment.company") // Doesn't work
public Treatment save(Treatment treatment) {
    log.debug("Request to save Treatment : {}", treatment);
    return treatmentRepository.save(treatment);
}

最佳答案

Hibernate 2nd Level文档:

此语法应在DAO层中sessionFactory.getCache().evictEntity(class, id)起作用。

例如 :

@Repository
public class TreatmentRepository {

  @Autowired
  private SessionFactory sessionfactory;

  public Treatment save(Treatment treatment) {
    Session session = sessionfactory.currentSession();
    Treatment t = session.save(treatment); 
    sessionFactory.getCache().evictEntity(Treatment.class, t.getId());
    return t; 
  }

}

关于java - hibernate 二级缓存逐出特定实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60473669/

相关文章:

java - tools.jar 丢失 - 但仅在第一次调用时(Tomcat 8/Java 8/Axis)

java - Intellij + Apache Math 3.3 给出 NoClassDefFounderror

java - 无法使用 feign 发出请求, "feign.FeignException$Forbidden: [403 Forbidden]"

java - JAX-WS RI : Best way to implement a Method Interceptor

java - 从文件加载 RSA 公钥

spring - FileSystemPersistentAcceptOnceFileListFilter 与 CompositeFileListFilter 不兼容

java - Spring:如果我无法扩展 AbstractTestNGSpringContextTests,如何在 Testng 测试类中获取 spring applicationContext

java - Hibernate的这种分页机制有什么问题呢?

MySQL 集群(主/从)和 Hibernate

java - 在子类的 Hibernate 中为每个表指定不同的序列