2010-03-10 72 views
0

我的豆節省的hasMany關係看上去違犯非空約束是這樣的:NHibernate的:當級聯= AllDeleteOrphan

public class A { 
    ... 
    [HasMany (MapType = typeof(B), Table = "B_table", ColumnKey = "A_object_id", 
       Fetch = FetchEnum.Join, 
       RelationType = RelationType.List, Index = "id", 
       Cascade = ManyRelationCascadeEnum.AllDeleteOrphan)] 

    IList<B> BList { get; set; } 
    ... 
} 

,並在此豆進行保存時,我想到的是B型的豆子會自動 保存(並在更新時刪除)。 NHibernate肯定會嘗試這樣做,但它確實如此,但是它首先將B_table.A_object_id設置爲NULL,然後NHibernate更新B_table來設置正確的B_table.A_object_id值(即:A.ID)。
這不是我想要的,因爲我在數據庫中有一個NOT NULL約束。
我的問題是:如何讓NHibernate自動保存具有從一開始就設置的正確ID的子對象?我知道我可以創建一個bean,保存它,獲取它的全新ID,創建B beans,設置它們的A_object_id,然後保存B beans ......但這是一個解決方法。

回答

0

單向關係(其中只有父母知道孩子)總是會導致設置Id的更新。我不知道爲什麼,它對我也沒有什麼意義,但這就是NHibernate的工作原理。

你需要創建一個雙向的關係,其中的hasMany將有一個逆=真和B必須在它的A類參考(應該填充時加B到的集合。

+0

其實,我不能這樣做 B類不能引用A,因爲映射不是那麼簡單 它的B_table.A_object_id中的B類也可能引用表A2_table中的對象,也就是說,我有一個合適的CHECK條件來驗證這樣一個關係,從B類的角度來看,我不需要知道它屬於哪裏 – wysek 2010-03-11 09:07:48

+0

然後我知道的唯一的其他選項是經過相當多的研究)將被刪除空限制。 – 2010-03-16 18:09:36

+0

你解決了你的問題嗎?我已經與類似於:( – frabiacca 2010-09-21 16:10:12