使用Hibernate保存对象时收到以下错误
object references an unsaved transient instance - save the transient instance before flushing
使用Hibernate保存对象时收到以下错误
object references an unsaved transient instance - save the transient instance before flushing
当前回答
还有一种可能会在休眠状态下导致此错误。您可以将对象A的未保存引用设置为附加的实体B,并希望持久化对象C。即使在这种情况下,您也会遇到上述错误。
其他回答
如果您的集合可以为null,请尝试:object.SetYouColaction(null);
这不是错误的唯一原因。我刚才遇到了它,因为我的代码中有一个错别字,我相信它设置了一个已经保存的实体的值。
X x2 = new X();
x.setXid(memberid); // Error happened here - x was a previous global entity I created earlier
Y.setX(x2);
我通过准确查找导致错误的变量(在本例中为Stringxid)发现了错误。我在保存实体并打印痕迹的整个代码块周围使用了捕获。
{
code block that performed the operation
} catch (Exception e) {
e.printStackTrace(); // put a break-point here and inspect the 'e'
return ERROR;
}
如果您使用的是SpringDataJPA,那么在服务实现中添加@Transactional注释可以解决这个问题。
我刚刚收到这个错误,因为我在保存之前设置了一个未代理的实体而不是另一个实体。
我应该链接一个代理实体实例。
参见以下说明:
Child saved = childRepository.save(child);
// INCORRECT
parent.setChild(child); // <-- 'child' is NOT managed (not proxied)
// CORRECT
parent.setChild(saved); // <-- 'saved' is managed (proxied)
解决这个问题的简单方法是保存这两个实体。首先保存子实体,然后保存父实体。因为父实体依赖于外键值的子实体。
下面是一对一关系的简单检查
insert into Department (name, numOfemp, Depno) values (?, ?, ?)
Hibernate: insert into Employee (SSN, dep_Depno, firstName, lastName, middleName, empno) values (?, ?, ?, ?, ?, ?)
Session session=sf.openSession();
session.beginTransaction();
session.save(dep);
session.save(emp);