hibernate中的异常saveupdate org.hibernate.TransientObjectException:

时间:2011-03-11 19:12:52

标签: hibernate

我喜欢这样的hibernate映射     class name =“com.example.Company”         表= “用户” >

<many-to-one 
            class="com.example.Organization" fetch="join"
            name="consumer" lazy="false" not-null="false">
            <column name="ORGANIZATION_ID" />
        </many-to-one>
        <many-to-one 
            class="com.example.Organization" fetch="join"
            name="supplier" lazy="false">
            <column name="ORGANIZATION" not-null="false"/>
        </many-to-one>

在保存更新之前,我的数据库是这样的

公司表

COMPANY   ORGANIZATION_ID ORGAIZATION
1             4            NULL

organization table

id   name
4     xxxx

现在我的问题是当我尝试执行saveorupdate org.hibernate.TransientObjectException时:对象引用未保存的瞬态实例 - 在刷新之前保存瞬态实例:com.example.Organization。

我使用了cascade = all但是每当我保存更新时它会在组织表中创建新行,因此我删除了cascade = all

当我使用casade =所有它正在工作但它做了类似的事情

company table
COMPANY   ORGANIZATION_ID ORGAIZATION
1             4            5

组织表

organizationid name
4               xxxx
5              nulll

它创建null。我怎样才能解决这个问题。?

1 个答案:

答案 0 :(得分:1)

我从您的帖子中了解到,您正在尝试将供应商添加到现有的公司记录中。因此,您要创建一个新的组织记录,将其与现有公司记录相关联并调用saveOrUpdate()。因此,当你没有设置cascadeType = All时,hibernate当然会抱怨你还没有在数据库中保存新的组织记录。当您使用cascadeType = All时,hibernate会将新的组织记录保存在数据库中,在您的情况下,该记录具有id = 5,然后使用此id更新现有的Company记录。因此,hibernate正常运行并做你要求它为你做的一切。也许你应该详细说明你的问题并陈述你想要做什么,因为你在帖子中提到的是hibernate的预期行为。