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类的角度来看,我不需要知道它属于哪里。那么,经过一番研究之后,我知道的唯一其他选择就是删除空约束。你解决了你的问题吗?我一直在与类似的事情斗争: