2010-07-06 54 views
3

如果我有對象類此方法:理解Hibernate的緩存

@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; 
} 

是否需要定義e緩存每個查詢如果我專門添加

hibernate.cache.use_query_cache = true 

回答

0

(......)我仍然需要投入@cache上getObjectEntries這樣的:

是的,你還是要緩存集合,如果你想(將高速緩存在特定的緩存區域中)。

我需要定義緩存爲每個查詢,如果我特意添加hibernate.cache.use_query_cache = true

從參考文檔有關hibernate.cache.use_query_cache財產(第3.4. Optional configuration properties):

允許查詢緩存。個別查詢仍然必須設置爲可緩存。 例如true | false

所以,是的,你還必須設置查詢可緩存(由上查詢或致電標準對象setCacheable(true))如果你想 - 這是IMO一件好事。

+0

還有一個問題。 爲什麼我需要緩存getObjectEntries的集合? 它是不是會放大內存太多? Hibernate可以保存一個引用到存在的對象,而不是引用所有的collecion? – Dejell 2010-07-08 13:18:01