спящий кэш 2-го уровня выселяет конкретную сущность - PullRequest
0 голосов
/ 01 марта 2020

У меня есть сущности, кэшированные с помощью Hibernate 2-го уровня кеша. Я хотел бы удалить (или обновить sh) конкретную сущность из кэша после определенного метода. Как это сделать?

Компания:

@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);
}

1 Ответ

0 голосов
/ 01 марта 2020

С Hibernate 2-й уровень Документация:

Этот синтаксис должен работать sessionFactory.getCache().evictEntity(class, id) на уровне DAO.

Например:

@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; 
  }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...