2011-07-28 22 views
1

我試圖使用JBossCache作爲JPA/Hibernate二級緩存提供程序來緩存重複調用的查詢。查詢返回特定類型的實體,我們稱它爲FooType。瞭解JBossCache - 緩存具有多種關聯的對象圖

FooType如下所示:

@Entity(name = FooType) 
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL) 
public class FooType { 
    protected BarType barType; 

    @ManyToOne(targetEntity = BarType.class, cascade = { 
     CascadeType.ALL 
    }) 
    BarType getBarType() { 
     return barType; 
    } 
} 

所以,Footype有許多-to-one關聯。現在,當我調用查詢時,似乎只有非常小的一部分放入緩存中。我認爲原因是因爲我沒有用@Cache標記標記關聯。我對麼?

但真正的問題是:

棒型也有協會的屈指可數,而這些返回的對象,它也提供協會等,建立協會的大圖。現在,我需要

一)註釋所有這些類和

B)還註釋協會

爲了要緩存整個查詢?

回答

1

想要緩存的所有實體/集合都必須有@Cache,以便可以緩存它們。查詢緩存的作用稍有不同,爲了獲得緩存的結果,您需要使查詢對象可緩存。

順便說一句,緩存,如果它真的有意義!

http://docs.jboss.org/hibernate/core/3.5/reference/en/html/performance.html#performance-cache

+0

所以,如果我做了查詢對象緩存,我並不需要做實體可緩存返回? – helpermethod

+0

問題是,初始化查詢被緩存,但Hibernate也創建了一個巨大的額外查詢,它遵循初始查詢。這些不會被緩存。 – helpermethod

+1

您需要查詢都是可緩存的,實體需要使用@Cache進行標記。不知道我明白這些附加查詢來自哪裏。他們是由你創造的嗎?或由Hibernate內部?如果他們是內部的,你不能對AFAIK做任何事情。 –