Как я читал во многих статьях (например, here) - для включения кэша второго уровня для спящего режима для данного объекта нам нужно установить стратегию параллелизма кэш-памяти на сущности посредством аннотации @org.hibernate.annotations.Cache
.Спящий кэш второго уровня для объекта передачи данных (DTO)
@Entity
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Person {
Кроме того, я также использовать кэш на уровень запросов (с использованием query.setCacheable(true)
) на некоторых запросах, которые получают эту сущность, и она работает хорошо.
Мой вопрос касается пользовательских запросов, которые использует проекцию DTO, так и для запросов, как это:
Query query = session.createQuery("SELECT new PersonDto(person.id, person.name) FROM Person person WHERE person.name = :name");
query.setParameter("name", name);
query.setCacheable(true);
query.uniqueResult();
Нужно ли мне установить @Cache
аннотацию также для PersonDto
? Я попытался запустить запрос без аннотации, и DTO был успешно кэширован.
Не могли бы вы объяснить, почему нам нужна аннотация для объектов сущности, а другие объекты не-сущности не требуют этого?
Спасибо.
Спасибо за ваше объяснение, это делает для меня смысл :) – Suchac