default cache configuration сущностей называются entity
:
конфигурация кэш может отличаться для каждого типа данных, хранящихся в кэше . Для того, чтобы переопределить шаблон конфигурации кэша, используйте свойство hibernate.cache.infinispan.data-type.cfg
где data-type
может быть один из:
entity
лиц проиндексированных @Id
или @EmbeddedId
атрибута.
immutable-entity
Объекты с тегами @Immutable
аннотация или набор как mutable=false
в файле сопоставления.
naturalid
Объекты, индексированные их атрибутом @NaturalId
.
collection
Все коллекции.
timestamps
Тип объекта сопоставления → временная метка последней модификации. Используется для кэширования запросов.
query
Сопоставление запроса → результат запроса.
pending-puts
Вспомогательные тайники для регионов, использующих режим недействительности кэш.
по умолчанию для collection
, immutable-entity
и naturalid
также конфигурация указана для entity
, так что вам не придется настраивать их отдельно (если вы не хотите создавать отдельные конфигурации, конечно), как это можно видеть в documentation и source code.
Примечание
В общем, что делает кэш Hibernate L2 распределенный не может быть хорошей идеей, поскольку экземпляры сущностей хранятся в disassembled hydrated state в кэше L2, а это означает, что только идентификаторы ассоциированных сущностей хранятся вместе с состоянием родительского объекта.
Предположим, у вас есть следующие объекты (A
, B
, C
все кэшировать):
@Entity
public class A {
@ManyToOne
private B b;
@OneToMany
private Collection<C> cs;
}
Даже если cs
коллекции были кэшируются также, чтобы полностью собрать A
экземпляр сущности из кэша вы бы следующие сетевые поездки в другие узлы кластера:
- Извлечь объект
A
.
- Извлечь сущность
B
состояние на основе идентификатора, хранящегося в ассоциации b
.
- Извлечь коллекцию
cs
ids.
- Для каждого идентификатора в коллекции
cs
выберите состояние объекта C
, один за другим.
Очевидно, что если вы собираете из коллекции A
экземпляров (из результата запроса, например), все вышеперечисленное выполняется для каждого экземпляра A
.
Все это означает, что чтение данных из базы данных напрямую (с правильно настроенной ленивой загрузкой, например, с использованием batch size), может быть намного более эффективным, чем все сетевые обходы в распределенном кеше.
Кроме того, это одна из причин, по которой кеш сущности/коллекции должен работать в режиме кластера недействительности (данные кэшируются только на узле, который читает/записывает его, но недействителен на других узлах при изменении).
Конфигурация кэша по умолчанию называется 'entity'. Настройте кеш, имеющий это имя, и он должен применяться ко всем объектам. –
Ницца .. спасибо. у вас есть ссылка из документации для этого? – Bozho
http://docs.jboss.org/hibernate/orm/5.1/userguide/html_single/Hibernate_User_Guide.html#caching-provider-infinispan-config –