引用的Object在In DB中时,org.hibernate.TransientObjectException

时间:2014-04-30 15:15:04

标签: java hibernate

我有两个实体A和B:

class A{
     ....
     B b;
}

class B{
     ....
}

并且在数据库中有一个ID为1的实例。现在,当我想要添加一个A的实例时,该实例具有对id为1的B的引用,我得到此异常:< / p>

org.hibernate.TransientObjectException: object is an unsaved transient instance - save the transient instance before merging:

实际上,当我执行此代码时,我得到了异常:

 entityManager.merge(a);

现在,如果我改变它:

a.setB(entityManager.find(B.class,a.getB().getId()))   // ensuring the object exist in DB
entityManager.merge(a);

然后它正常工作!但我不想这样做,因为id = 1的当前B可能与数据库版本不同(我希望将来保存它,我现在不想保存它,所以我不能使用级联技术)

我知道这个问题已经被问了好几千次但是所有答案都说id = 1的对象B应该在DB中。好吧它现在在那里,但它也没有用。可能有用的唯一剩下的一点就是b是由unmarshallinga加载的一个json字符串,因此它不被Hibernate加载。

有人有任何想法吗?

感谢。

1 个答案:

答案 0 :(得分:0)

如果它是一个新实例,则意味着它是一个瞬态实例并且与DB无关,因此它无法保存它。唯一的方法是你必须加载&#39; a&#39;然后在第二组代码中设置。