2011-05-20 72 views
12

我有這樣的代碼:Hibernate的緩存的mappedBy對象

@Entity 
@Table(name = "A") 
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 
public class A 
{ 
    @OneToOne(cascade={CascadeType.ALL}, fetch=FetchType.EAGER, mappedBy="a") 
    public B getB() {}; 
} 

@Entity 
@Table(name = "B") 
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 
public class B 
{ 
    @OneToOne(cascade={}, fetch=FetchType.LAZY) 
    @JoinColumn(name="A_ID") 
    public A getA() {}; 
} 
每次

A是裝載有查詢B。爲什麼A.getB()在加載A後沒有被緩存,是否可以緩存?

+1

你是怎樣加載'A'的?向我們展示代碼。 – skaffman 2011-05-20 06:57:29

+0

like:getEntityManager()。find(A.class,id); – Dainius 2011-05-20 07:35:54

+0

使用hibernate-2.1.8和hazelcast進行緩存 – Dainius 2011-05-20 07:38:45

回答

2

解決方法,對我的工作是創造更多的方法與@OneToMany

@OneToMany(cascade={}, fetch=FetchType.EAGER, mappedBy="a") 
public Set<B> getBSet() {}; 

@Transient 
public B getB() { return b.iterator().next(); } 

我不是很滿意這個解決方案,但它的作品,我找不到其他辦法。

0

嘗試將@Cache註釋放在getB()getter上。我的觀察是,如果您緩存對象,則可能不會將關聯視爲緩存。

+0

這是行不通的。還試圖看看這個對象的緩存,看起來這個字段沒有值。 – Dainius 2011-05-22 11:24:08