代码之家  ›  专栏  ›  技术社区  ›  Dan TheCodeJunkie

NHibernate一对一关系无法正确保存

  •  0
  • Dan TheCodeJunkie  · 技术社区  · 16 年前

    这是我必须做的一个例子,否则孩子就不会得救。

     var session = SessionProvider.OpenSession.Session;
                using (var tx = session.BeginTransaction())
                {
                    try
                    {
                        session.SaveOrUpdate(parent);
                            if (parent.Child.IsPersisted)
                            {
                                session.Update(parent.Child);
                            }
                            else
                            {      
                                session.Save(parent.Child);
                            }
                        }
    }
    
    
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="false" assembly="xxx">
      <class name="Parent" polymorphism="explicit" table="Parent">
        <id name="Id" column="JointID" type="int">
          <generator class="native" />
        </id>
        <one-to-one name="Child" class="Child" />
      </class>
    </hibernate-mapping>
    
    
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="false"
                       assembly="xxx">
      <class name="Child" xmlns="urn:nhibernate-mapping-2.2" polymorphism="explicit" table="Child">
        <id name="Id" column="JointID" type="int" unsaved-value="0">
          <generator class="native" />
        </id>
        <many-to-one name="Parent" column="JointID" insert="false" update="false" />
      </class>
    </hibernate-mapping>
    

    当我按照下面的建议将关系设置为级联时,会出现外键约束错误。如果我使用NHProf分析查询,它将尝试使用临时id(-1)作为insert语句中的JointId,而不是新创建的父id。 父表中的JointId是一个标识键,也许这是一个问题?

    1 回复  |  直到 16 年前
        1
  •  0
  •   DanP    16 年前

    <one-to-one> 映射以使其正常工作。

    <one-to-one name="Child" class="Child" cascade="save-update" /> 
    

    here .

    推荐文章