nhibernate - 具有相同 ID 键字段的多对多
问题描述
如何在 nHibernate 中将两个表连接为多对一和一对多。它们都具有与键列相同的“PLAN_ID”。我的数据库结构预先存在。
下面是我正在使用的映射和我得到的错误:
表:PLANN(一)
PLAN_ID <-- PRIMARY KEY
START_DATE
CHECK_CHAR
...
表:PLANN_DOCUMENT(对许多)
PLAN_ID <-- PRIMARY KEY
DOC_ID <-- ID to a DOCUMENT table
DOC_NAME
DOC_TYPE
计划类:
public virtual... PlanId, StartDate, CheckChar, PlanStatus,
public virtual ISet<DocsysHoldingDoc> DocsysHoldingDocs { get; set; }
public virtual DocsysHoldingDoc DocsysHoldingDoc { get; set; }
PlannDocument 类:
public virtual...PlanId, DocId, DocName, DocType
public virtual Plann PlannItem { get; set; }
规划 HBM XML
<class name="Plann" abstract="true" table="PLANN">
<id name="PlanId" column="PLAN_ID"
<generator class="assigned"/>
</id>
<property name="StartDate" column="START_DATE" />
<property name="CHECK_CHAR" column="CHECK_CHAR" />
...
<set name="PlannDocument" table="PLANN_DOCUMNET">
<key column="PLAN_ID"></key> //<<KEY IN JOINING TABLE BUT ALSO ID IN THIS TABLE
<one-to-many class="DocsysHoldingDoc"/>
</set>
</class>
计划文档 HBM XML
<class name="PlannDocument" abstract="true" table="PLANN_DOCUMNET">
<id name="PlanId" column="PLAN_ID" type = "int">
<generator class="assigned"/>
</id>
<property name="DocId" column="DOC_ID" />
<property name="DocName" column="DOC_NAME" />
<property name="DocType" column="DOC_TYPE" />
<many-to-one name="Plann" column="PLAN_ID"></many-to-one>
</class>
错误:NHibernate.MappingException:“无法为类 <>.PlannDocument 构建插入语句:添加类的 Id 时发生故障”
ArgumentException:此 SQL 构建器中已添加列“PLAN_ID”参数名称:columnName
我在这里做错了吗?
解决方案
如果您对identifier
所需many-to-one
的关联有相同的列 - 它并不是真正的many-to-one
关联。共享相同identifier
意味着它的one-to-one
关联。只需使用它代替您many-to-one
在 PlannDocument.hbm.xml 中的映射,它应该可以工作:
<one-to-one name="Plann" constrained="true" />
如果你PlannDocument.Plann
可以为空而不是使用constrained="false"
。但请注意,这将花费您额外的查询来检查是否Plann
确实存在。
推荐阅读
- r - 按时间对数据帧列表进行子集
- python - 通过 pip 为 Django 数据库安装 mysqlclient
- c# - 无法将类型为“CustomObject”的对象转换为 System.Data.DataRowView 异常
- ios - 如何从 WKWebView HTML 中的项目加载图像
- c++ - 使用 operator() 扩展 Eigen::EigenBase
- javascript - 我的转换有问题:翻译属性
- pandas - 在熊猫中,如何将函数应用于返回两列的每一列
- python - 如何使用 pandas 从 csv 文件中的列中提取日期?
- python-3.x - 'config' 未定义 Pocketsphinx Python
- javascript - 如何使用 fetch api 方法从 php 文件中访问数据?