понимание спящего кеша - PullRequest
3 голосов
/ 06 июля 2010

Если у меня есть этот метод в классе объекта:

@OneToMany( fetch = FetchType.EAGER,
    cascade = { CascadeType.ALL },
    mappedBy = "object"  )
@org.hibernate.annotations.Cascade(
    {org.hibernate.annotations.CascadeType.SAVE_UPDATE})
@Column( nullable = false  )
public Set<ObjectEntry> getObjectEntries() {
    return this.objectEntries;
}

и я ставлю @cache на ObjectEntry и Object

@Cache(usage =  CacheConcurrencyStrategy.READ_WRITE)
public class Object extends HashCodeValidator {

@Cache(usage =  CacheConcurrencyStrategy.READ_WRITE)
public class ObjectEntry extends HashCodeValidator 

Мне все еще нужно поместить @cache в getObjectEntries следующим образом:

@org.hibernate.annotations.Cascade(
    {org.hibernate.annotations.CascadeType.SAVE_UPDATE})
@Column( nullable = false  )
@Cache(usage =  CacheConcurrencyStrategy.READ_WRITE)
public Set<ObjectEntry> getObjectEntries() {
    return this.objectEntries;
}

Нужно ли определять кэш для каждого запроса, если я специально добавлю

hibernate.cache.use_query_cache = true

1 Ответ

0 голосов
/ 06 июля 2010

(...) Мне все еще нужно поместить @cache в getObjectEntries следующим образом:

Да, вам все равно придется кэшировать коллекцию , если выхочу (это будет кэшироваться в определенной области кэша).

Нужно ли определять кэш для каждого запроса, если я специально добавлю hibernate.cache.use_query_cache = true

Изсправочная документация о свойстве hibernate.cache.use_query_cache (раздел 3.4. Необязательные свойства конфигурации ):

Включает кэш запросов.Отдельные запросы все еще должны быть установлены кэшируемыми. например true | false

Итак, да, вам все равно нужно установить запрос cachable (вызвав setCacheable(true) в запросеили критерий объекта), если вы хотите - что IMO хорошо.

...