NHibernate:与Cascade = AllDeleteOrphan保存HasMany关系时违反非空约束

时间:2010-03-10 15:40:53

标签: nhibernate nhibernate-mapping javabeans

我的bean看起来像这样:

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)。
这不是我想要的,因为我在数据库中有一个NOT NULL约束 我的问题是:如何使NHibernate从一开始就使用正确的ID设置自动保存子对象?我知道我可以创建一个bean,保存它,获取它的全新ID,创建B豆,设置它们的A_object_id然后保存B豆......但这是一种解决方法。

1 个答案:

答案 0 :(得分:0)

单向关系(其中只有父级知道子级)始终会导致更新以设置Id。我不知道为什么这对我来说也没有多大意义,但这就是NHibernate的工作方式。

你需要创建一个双向关系,其中HasMany的Inverse = true,B将引用A类(当你将B添加到A集合时应该填充。