2017-01-09 3 views
1

Как я читал во многих статьях (например, 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 был успешно кэширован.

Не могли бы вы объяснить, почему нам нужна аннотация для объектов сущности, а другие объекты не-сущности не требуют этого?

Спасибо.

ответ

0

Я не на это 100%, но вы вручную устанавливаете cacheable в true для запроса.

Аннотация для Person является эквивалентом для лица.

Я бы не подумал об этом, так как в этом случае кешируется PersonDTO. Если бы вы напишете еще один запрос: select new PersonDTO(person.id, person.name) from Person person where person.id = 10, я не думаю, что он будет смотреть в ваш кеш, чтобы узнать, существует ли PersonDTO с id == 10; тогда как кеш сущностей будет потому, что он понимает, что это одно и то же.

Я бы подумал об этом, так как сам запрос кэшируется (что означает, что если он снова запущен до TTL, тогда будут получены кешированные результаты). Это кэширование того факта, что вы использовали этот запрос с определенным параметром name, а не с PersonDTO с этим именем в кеше. Имеет ли это смысл?

+0

Спасибо за ваше объяснение, это делает для меня смысл :) – Suchac

Смежные вопросы