NHibernate:保存HasMany与Cascade=AllDeleteOrphan的关系时违反了NOTNULL约束

NHibernate:保存HasMany与Cascade=AllDeleteOrphan的关系时违反了NOTNULL约束,nhibernate,nhibernate-mapping,javabeans,Nhibernate,Nhibernate Mapping,Javabeans,我的豆子看起来像这样: public class A { ... [HasMany (MapType = typeof(B), Table = "B_table", ColumnKey = "A_object_id", Fetch = FetchEnum.Join, RelationType = RelationType.List, Index = "id", Cascade

我的豆子看起来像这样:

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; }
    ...
}
当在这个bean上执行Save时,我希望类型B的bean将自动 更新时也保存和删除了。NHibernate当然在尝试,但它确实这样做了 首先将B_table.A_object_id设置为NULL,然后NHibernate更新B_table设置正确的B_table.A_object_id值,即:A.id。 这不是我想要的,因为我在数据库中有一个NOTNULL约束。
我的问题是:如何让NHibernate从一开始就自动保存具有正确ID设置的子对象?我知道我可以创建一个bean,保存它,获取它的全新ID,创建B bean,设置它们的A\u对象\u ID,然后保存B bean。。。但是这是一个解决办法。

单向关系中,只有父母知道孩子的情况,总是会导致Id设置的更新。我不知道为什么,这对我来说也没有多大意义,但这就是NHibernate的工作原理


您需要创建一个双向关系,其中HasMany将有一个Inverse=true,而B将有一个对类a的引用,当您将B添加到a集合时,应该填充该类

事实上,我不能那样做。B类不能有对a的引用,因为映射不是那么简单。它的B_表中的B类。A_对象id也可以引用表A2_表中的对象。也就是说,还有另一个类A2,它有许多B对象。我在数据库中有一个适当的检查条件来验证这种关系。从B类的角度来看,我不需要知道它属于哪里。那么,经过一番研究之后,我知道的唯一其他选择就是删除空约束。你解决了你的问题吗?我一直在与类似的事情斗争: