2011-07-21 71 views
0

我有一個類如下級聯保存在Hibernate中,foregin鍵保存爲空

class A{ 
Set<B> = new HashSet<B>(); 

} 

class B{ 
    A a; 

} 

A的現在主鍵自動生成的,所以我不能前將其設置爲A或B-B具有A的逆映射B中的對象最初爲空。 這映射到DB.Now 2表A和B,如果我有一個對象A的集合包含2條記錄,然後當我保存對象A然後2記錄被創建在B.Now我的代碼工作正常。但是當我看到在B中recods我發現對應於A的外鍵是空白的。怎麼回事?

TABLE B structure 
BId Aid Bname 

//援助是國外關鍵,tablles主鍵和援助存儲爲空,爲什麼?我想的是,援助應自動保存B中

+0

根據你提供的信息,喬爾的答案聽起來正確的目標。如果這不是問題,請提供更多詳細信息,例如一些示例代碼和映射文件。 –

回答

4

您需要正確集中的關係的兩側

parentA.getBChilds().add(childB); 
childB.setParentA(parentA); <-- Important see link below working bi 

您可以創建在父鏈接的管理方法,正確設置兩側。

public class ParentA 
{ 
...  
public void addChildB(B pChild) 
{ 
    this.childsB.add(pChild); 
    pChild.setParentA(this); 
}  
... 
} 

設置 '逆' 屬性爲true的集合關係

<set name="bChilds" inverse="true"> 
    <key column="bID"/> 
    <one-to-many class="childB"/> 
</set> 

也許你倒數,梯級之間的混合。對於一個很好的解釋,你可以閱讀這個博客條目的休眠反相屬性Hibernates bizarre interpretation of inverse ;)和這個休眠文檔Working bi-directional links

+0

保存了很多時間! –