NHibernate+;多对多+;袋子+;映射表
我有以下三节课NHibernate+;多对多+;袋子+;映射表,nhibernate,many-to-many,bag,Nhibernate,Many To Many,Bag,我有以下三节课 BusinessStream Scheme Bus_Stream_Scheme_Map 当我尝试执行transaction.Commit()方法时,在session.SaveOrUpdate()之后,对于BusinessStream,我得到以下错误: 无法将NULL插入(“DBO”、“总线流”方案“映射”、“总线流”方案“映射”ID”) HBM文件 业务流程 <class name="BusinessStream" table="BUS_STREAM"> <i
BusinessStream
Scheme
Bus_Stream_Scheme_Map
当我尝试执行transaction.Commit()
方法时,在session.SaveOrUpdate()之后,对于BusinessStream
,我得到以下错误:
无法将NULL插入(“DBO”、“总线流”方案“映射”、“总线流”方案“映射”ID”)
HBM文件
业务流程
<class name="BusinessStream" table="BUS_STREAM">
<id name="Id" column="BS_ID" type="Int32" >
<generator class="sequence">
<param name="sequence">BUS_STREAM_SEQ</param>
</generator>
</id>
<property name="Name" column="Name" type="String"/>
<property name="Description" column="Description" type="String"/>
<bag name="Schemes" table="BUS_STREAM_SCHEME_MAP" lazy="false">
<key column="BUS_STREAM_ID"></key>
<many-to-many class="Scheme" column="SCHEME_ID"></many-to-many>
</bag>
</class>
总线流
计划
<class name="Scheme" table="SCHEME_DEF">
<id name="Id">
<column name="SCHEME_ID"/>
<generator class="native">
<param name="sequence">SCHEME_DEF_SEQ</param>
</generator>
</id>
<property name="Description" column="SCHEME_DESC" type="String"/>
</class>
方案定义如下
业务流程图
<class name="BusinessStreamSchemeMapping" table="BUS_STREAM_SCHEME_MAP">
<id name="Id">
<column name="BUS_STREAM_SCHEME_MAP_ID"/>
<generator class="native">
<param name="sequence">BUS_STREAM_SCHEME_MAP_SEQ</param>
</generator>
</id>
</class>
巴士(车流)方案(地图)
我做错了什么?这只是一个猜测,但如果您将总线\u流\u方案\u映射\u ID
设置为自动递增字段,它会起作用吗?根据设计,我们使用Oracle的序列对象为主键字段生成ID。所以,如果我直接对BusinessStreamSchemeMapping
对象执行SaveOrUpdate(),那么它就可以工作了。它在BUS\u STREAM\u SCHEME\u MAP
表中创建一个新行。但是,当这个类在
中使用时,它却无法做到这一点。自从我使用NHibernate以来,已经有一段时间了,但我记得多对多关系可以在没有关联表的映射项的情况下进行映射。您的业务逻辑和/或其他用例是否需要映射BusinessStreamSchemeMapping
?我们正在讨论同样的问题,看看是否可以避免映射类/表。谢谢你的评论。