当前位置: 代码迷 >> java >> 了解hibernate缓存
  详细解决方案

了解hibernate缓存

热度:25   发布时间:2023-07-25 19:45:21.0

如果我在对象类中有这个方法:

@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放在ObjectEntryObject

@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

(...)我还需要将@cache放在getObjectEntries上,如下所示:

是的,如果需要,您仍然需要缓存集合 (将在特定缓存区域中缓存)。

如果我特意添加hibernate.cache.use_query_cache = true是否需要为每个查询定义缓存

从有关hibernate.cache.use_query_cache属性的参考文档(第节 ):

启用查询缓存。 个别查询仍然必须设置为可缓存。 例如, true false

所以,是的,你仍然必须设置一个查询cachable (通过在查询或条件对象上调用setCacheable(true) ),如果你想 - 这对IMO来说是件好事。

  相关解决方案