【发布时间】:2013-02-24 01:30:23
【问题描述】:
我正在尝试将一组加入的子类实体映射到父实体。 NHibernate 生成的 SQL 似乎不正确。我在映射中遗漏了什么吗?有没有其他方法可以解决这个问题?
<class name="ResultItem" table="result">
<id name="ID">
<generator class="identity" />
</id>
<many-to-one name="Job" column="JobID"/>
<property name="Timestamp"/>
<many-to-one name="User" column="UserID"/>
<joined-subclass name="ResultItemAttachment" table="result_attachment">
<key column="ID"/>
<property name="Comment"/>
</joined-subclass>
</class>
这是 NHibernate 生成的 SQL。似乎它在超类和子类成员之间感到困惑?唯一具有 JobID 的表是结果表,而不是 result_attachment。
SELECT attachment0_.JobID as JobID1_,
attachment0_.ID as ID1_,
attachment0_.ID as ID26_0_,
attachment0_1_.JobID as JobID26_0_,
attachment0_1_.`Timestamp` as Timestamp26_0_,
attachment0_1_.UserID as UserID26_0_,
attachment0_.`Comment` as Comment33_0_
FROM result_attachment attachment0_
inner join result attachment0_1_ on attachment0_.ID=attachment0_1_.ID
WHERE attachment0_1_.JobID=?;
提前致谢
【问题讨论】:
-
映射对我来说看起来不错。你能发布查询吗?
-
映射没问题。你能显示 ResultItem 和 ResultItemAttachment 类吗?
-
您在查询中的哪里看到了 result_attachment.JobID? attachment0_1_ 是结果的别名。
-
@florian-lim NHibernate 生成的查询在那里。
-
@jakub-linhart 公共抽象类 ResultItem : DataObject { public virtual Job Job { get;放; } 公共虚拟日期时间时间戳 { 获取;放; } 公共虚拟用户用户 { 获取;放; } } 公共类 ResultItemAttachment : ResultItem { 公共虚拟字符串评论 { 获取;放; } } - 抱歉没有休息,哈哈
标签: nhibernate nhibernate-mapping