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