【问题标题】:Transiend Exception NHibernate瞬态异常 NHibernate
【发布时间】:2011-07-20 07:58:31
【问题描述】:

我有 3 张桌子:

员工 {PK: EmployeeId, name, lastname} 项目{PK:ProjectId、名称、描述}

EmployeebyProject {PK:EmployeeId :int, PK:ProjectId :Project, DateBegin :int, DateEnd : DateTime}

我需要在这个表中做一些 CRUD。

现在我需要插入,顺便说一下,在 nhibernate 的软件中,EmployeebyProject 类有对象 Employee 和 Project 而不是 EmployeeId 和 ProjectId。

这是映射

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="AdminProject"
                   namespace="AdminProject.Business.Entity">

  <class name="EmployeebyProject">

    <composite-id>
      <key-many-to-one name="Employee" column="EmployeeId"  class="Employee"></key-many-to-one>
      <key-many-to-one name="Project" column="ProjectId"  class="Project" ></key-many-to-one>
    </composite-id>


    <property name="DateBegin"/>
    <property name="DateEnd"/>

  </class>

</hibernate-mapping>

问题是当我尝试保存时发生 NHibernate.TransientObjectException。如何避免?

【问题讨论】:

    标签: hibernate nhibernate


    【解决方案1】:

    TransientObjectException 表示您已告诉 Hibernate 保存某个对象,但该对象引用了您尚未保存的另一个对象。通常有两种方法可以解决这个问题:

    1. 在提交封闭事务之前手动保存其他对象。
    2. cascading 添加到关系中,这样当您保存第一个对象时,另一个对象也会被保存,只是被第一个对象引用。

    【讨论】:

    • 那么,在添加级联的情况下,在这个映射中,sintax 是怎样的呢?谢谢
    • @ale:我不确定,因为它是复合 ID 的一部分,但我怀疑你可以添加 cascade="..." 和任何你想要的 cascade type
    猜你喜欢
    • 2013-11-22
    • 1970-01-01
    • 2011-09-24
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-29
    • 1970-01-01
    相关资源
    最近更新 更多