【问题标题】:NHibernate simple collection of joined-subclass entitiesNHibernate 连接子类实体的简单集合
【发布时间】: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


【解决方案1】:

恐怕这目前是 NHibernate 中的一个错误(从 2.1 开始就存在 :|)显然在 3.2 的当前 alpha 中有一个修复

https://nhibernate.jira.com/browse/NH-1747

可能的解决方法是在运行时手动获取包。不太理想,其他选择是尝试运行 alpha 版本,但在生产环境中运行 alpha 并不是一个好主意。

【讨论】:

  • 谢谢伙计。我会留意 3.2 的稳定版本。
  • 同样,我讨厌现在必须围绕这个编写代码:(毁了我的一天!:'(
猜你喜欢
  • 2010-11-02
  • 1970-01-01
  • 1970-01-01
  • 2011-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-17
  • 1970-01-01
相关资源
最近更新 更多