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