NHibernate:从lazy=true到fetch=join的变化带来了世界

NHibernate:从lazy=true到fetch=join的变化带来了世界,nhibernate,nhibernate-mapping,Nhibernate,Nhibernate Mapping,我的应用程序中有一个用户对象/映射。每个用户都有一个联系信息列表(电话、电子邮件等) 用户的映射包含: <bag name="ContactInfo" table="contact_info" lazy="true" cascade="all"> <key column="contact_id"/> <one-to-many class="...ContactInfo, ..."/> </bag> 这很好,但是我遇到了n+1选

我的应用程序中有一个用户对象/映射。每个用户都有一个联系信息列表(电话、电子邮件等)

用户的映射包含:

<bag name="ContactInfo" table="contact_info" lazy="true" cascade="all">
    <key column="contact_id"/>
    <one-to-many class="...ContactInfo, ..."/>
</bag>

这很好,但是我遇到了n+1选择问题,所以我需要对它进行一点优化。但由于某种原因,当我将其更改为join并执行一些db操作时,NH开始更新数据库中的所有contact_info对象。当我说数据库操作时,我不是指联系人。我什么都想说

有人知道为什么吗?thx


编辑:刚刚意识到它也为lazy=“true”执行此操作,但第二次是在加载对象之后。为什么的问题仍然存在

我想知道是不是你的级联导致了这个问题。在整个图形中是否有cascade=all?如果是这样,您可能需要重新评估您的生命周期战略

以下是NHibernate 1.2参考文件第9.9节的内容(重点已添加)

映射关联(多对一, 或集合)使用cascade=“all” 将关联标记为父级/ 子样式关系在哪里 保存/更新/删除父项 导致保存/更新/删除 儿童(任)更进一步,仅仅 从持久性 父项将导致保存/更新 孩子


我想知道是不是你的级联导致了这个问题。在整个图形中是否有cascade=all?如果是这样,您可能需要重新评估您的生命周期战略

以下是NHibernate 1.2参考文件第9.9节的内容(重点已添加)

映射关联(多对一, 或集合)使用cascade=“all” 将关联标记为父级/ 子样式关系在哪里 保存/更新/删除父项 导致保存/更新/删除 儿童(任)更进一步,仅仅 从持久性 父项将导致保存/更新 孩子


事实证明,ContactInfo中的枚举字段是问题所在。我不介意那个特定的字段是否是字符串,所以更改它解决了这个问题。

结果是ContactInfo中的枚举字段是问题所在。我不介意那个特定的字段是否是字符串,所以更改它解决了这个问题。

但为什么会发生这种情况?我没有改变任何东西,那么更新的目的是什么?在任何情况下,我将其更改为cascade=none,并且没有任何区别。谢谢你的回复,但为什么会发生这种情况?我没有改变任何东西,那么更新的目的是什么?在任何情况下,我将其更改为cascade=none,并且没有任何区别。谢谢你的回复