我有一个使用休眠二级缓存进行缓存的实体。我想在使用特定方法后从缓存中逐出(或刷新)特定实体。怎么做 ?
公司名称:
@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/