如何将更新查询合并到NHibernate中的同一个表?

时间:2009-07-15 08:20:02

标签: nhibernate

我使用NHibernate 2.1 beta2。

首先是场景:

我的对象分为两部分 - 存根和存根补充。我们的想法是,当数据库中需要一组对象时,只会获取存根。一旦用户访问特定对象并且所访问的字段属于存根补充部分 - 则从数据库中获取相应的存根补充。还有更多,但其余的与我的问题无关。

尽管存根和存根补充表示相同对象的不同部分,但我们无法弄清楚如何在单个映射中表达这种分离,因此有两个映射 - 一个用于存根对象的一部分和另一个 - 对于存根补充,它实现为嵌套在存根中的私有对象。

还有两个注释:

  • 存根补充部分不包含版本字段,只包含存根。更改任何字段,无论是存根还是存根补丁都会影响单个版本字段。
  • 我们的客户端根本不知道DAL,这意味着客户端没有NHibernate程序集。对象被传送到服务器端,它们被连接到NHibernate会话。

问题:

因为有两个映射(并且,我猜,只有一个版本字段),当一个完全加载的对象(即带有加载的存根补充部分的对象)被更新时,NHibernate会生成两个更新语句,这些语句通常用于同一个表

我们遇到了问题。是否可以将它们合并为一个更新语句?

感谢。

P.S。

以下是一个示例映射文件:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="true">
  <class name="SampleProject.Entities.EntityA,SampleProject.Entities" lazy="false" table="EntityA" >
    <id name="Id" column="Id" type="int" >
      <generator class="native"  />
    </id>
    <version name="m_lastChanged" access="field" column="LastChanged" generated="always" type="Byte[]"/>
    <property name="Name" access="property" type="string"/>
    <component name="ParentId" class="SampleProject.Entities.EntityId,SampleProject.Entities">
      <property name="TypeAsDBValue" access="property" type="string" column="ParentType" />
      <property name="IdAsDBValue" access="property" type="string" column="ParentId" not-null="false"/>
    </component>
  </class>

  <class name="SampleProject.Entities.EntityA+StubComplement,SampleProject.Entities" table="EntityA" lazy="false" >
    <id name="OwnerId" column="Id" type="int" >
      <generator class="native"/>
    </id>
    <property name="Description" access="property" type="string"/>
  </class>
</hibernate-mapping>

0 个答案:

没有答案