Мы позволили кэша второго уровня на спящем режиме, используя следующие свойства:Hibernate кэша второго уровня ленивая коллекция размер
hibernateProperties.setProperty("hibernate.cache.region.factory_class", "org.hibernate.cache.ehcache.EhCacheRegionFactory");
hibernateProperties.setProperty("hibernate.cache.use_query_cache", Boolean.TRUE.toString());
hibernateProperties.setProperty("hibernate.cache.use_second_level_cache", Boolean.TRUE.toString());
hibernateProperties.setProperty("hibernate.cache.use_structured_entries", Boolean.TRUE.toString());
hibernateProperties.setProperty("hibernate.cache.generate_statistics", Boolean.TRUE.toString());
И помечены наши объекты с помощью тега кэша:
@Entity
@Indexed
@Table(name = "item")
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
public class Item implements Serializable {
Этой сущность имеет ленивую коллекцию с опцией ленивого сбора:
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
@ManyToMany(fetch = FetchType.LAZY, targetEntity = User.class, mappedBy = "likes")
@LazyCollection(LazyCollectionOption.EXTRA)
private List<User> users;
Это похоже на работает хорошо, и я не вижу каких-либо запросов к базе данных после того, как данные в кэше, но то, что мы видим, являются журнал вызовов
select count(user_id) from user_items where item_id =?
Есть ли способ получить спящий режим кэшировать размеров ленивая коллекция, поэтому не нужно ударять по базе данных, когда мы делаем users.size()?
Я изменил к CacheConcurrencyStrategy.READ_WRITE и увидеть такое же поведение.
В первом запросе я вижу запросы для выбора сущностей и запросов для поиска размера коллекций. Я вижу сообщения журнала о том, что объекты кэшируются.
В последующих запросах нет вызовов для загрузки объектов, но есть еще вызовы для поиска размеров коллекций.
«Документация Ehcache, так как она не поддерживает транзакционное кэширование» - что это значит, что вы думаете о транзакционном кеше? – NimChimpsky
Я изменил на CacheConcurrencyStrategy.READ_WRITE и вижу то же поведение. В первом запросе я вижу запросы для выбора сущностей и запросов, чтобы найти размер коллекций. Я вижу сообщения журнала о том, что объекты кэшируются. В последующих запросах нет вызовов для загрузки сущностей, но есть еще вызовы для поиска размеров коллекций. – Chris