2015-05-23 33 views
0

我有三個實體,例如A, B, C。實體AB的父項,加入了繼承類型。實體B聚合具有ManyToOne關係的實體C。 結構看起來像未來:JPA鏈接字段值

@Entity 
@Inheritance(strategy = InheritanceType.JOINED) 
class A { 
    String str; 
    String cStr; 
} 

@Entity 
class B extends A { 
    @ManyToOne 
    C c; 
} 

@Entity 
class C { 
    String str; 
} 

我不知道是否有可能在所有的實體水平,但是,我需要從C鏈接的str價值的申請A.cStr。它應該如下所示:我創建的實體B的填充值爲c,將其存儲並將值從C.str填入A.cStr。當我從數據庫中取A時,我可以看到A.cStrC.str具有相同的值。

回答

0

不,這是不可能的。所有你需要做的就是從A C字符串是實施方法和B改寫它:

在一個

public String getCString() { 
    return null; 
} 
B中

@Override 
public String getCString() { 
    return c.getStr(); 
} 

當然, A不是B實例的實例不會有任何CString。

+0

嗨,謝謝你的回覆。 「當然,不是B實例的A的實例不會有任何CString。」完全同意它,在這種情況下,A.str具有默認值。但如果它是B的實例,它可能會被C.str的值所超越。這是我的任務。 – Marian

+0

但按照你的建議,我可以在B實體中添加額外的邏輯到setC中,在那裏我可以填充A.cStr。所以再次感謝您的評論,它真的幫助了我。 – Marian

+0

再一次,你不需要A中的一個字段來做到這一點。只依賴多態。在A中從'getString()'返回'this.str',並覆蓋B中的方法返回'c.getStr()'。 –