代码之家  ›  专栏  ›  技术社区  ›  Yannis

nhibernate:change from lazy=true to fetch=join带回世界

  •  1
  • Yannis  · 技术社区  · 16 年前

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

    用户的映射包含:

    <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对象。当我说数据库操作时,我的意思不是要长信息联系。我什么意思。

    有人知道为什么吗?谢谢

    编辑:刚意识到它也是为lazy=“true”而做的,但第二次是在加载对象之后。为什么还有这个问题

    2 回复  |  直到 16 年前
        1
  •  1
  •   Michael Gattuso    16 年前

    我想知道是不是你的级联引起了这个问题。在整个图表中是否有cascade=all?如果是这样,您可能希望重新评估您的生命周期策略。

    以下是NHibernate 1.2参考文件第9.9节中的一个尽管(强调已添加)

    映射一个关联(多对一, 或collection)with cascade=“all” 将关联标记为父级/ 儿童式关系 保存/更新/删除父级 导致保存/更新/删除 儿童(任)。 福瑟莫尔,一个纯粹的 从持久的 父级将导致保存/更新 孩子 .

        2
  •  0
  •   Yannis    16 年前

    结果发现contactinfo中的枚举字段是问题所在。我不介意那个特定的文件是不是字符串,所以修改它就解决了这个问题。