我有两个实体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加载。
有人有任何想法吗?
感谢。
答案 0 :(得分:0)
如果它是一个新实例,则意味着它是一个瞬态实例并且与DB无关,因此它无法保存它。唯一的方法是你必须加载&#39; a&#39;然后在第二组代码中设置。