“不存在具有给定标识符的行”,尽管确实存在
我正在使用Hibernate并获得
线程“主”中的异常org.hibernate.ObjectNotFoundException:不存在具有给定标识符的行:[#271]
关于此错误,很奇怪的是,具有给定id的对象存在于数据库中。我在另一个应用程序运行中插入了有问题的记录。如果我在同一运行(即同一hibernate会话)中访问它,则检索数据似乎没有问题。
仅因为这可能是映射的错误:
public class ProblemClass implements Persistent { @ManyToOne(optional = false)
private MyDbObject myDbObject;
}
public class MyDbObject implements Persistent {
@OneToMany(mappedBy = "myDbObject")
private List<ProblemClass> problemClasses;
@ManyToOne(optional = false)
private ThirdClass thirdClass;
}
我什至不知道在哪里看。任何提示高度赞赏!
只是为了澄清一下:数据已插入到应用程序的另一个RUN中。它肯定在数据库中,因为在应用程序终止后,我可以通过SQL查询看到它。然后,即再次启动应用程序时,我在数据库的第一个查询中得到了错误-
不删除,不涉及回滚。
另外:因为有人问,这里是获取数据的代码:
public List<ProblemClass> getProblemClasses() { Query query = session.createQuery("from ProblemClass");
return query.list();
}
只是为了使其完整,这是插入它的通用代码(在获取应用程序的另一个RUN之前):
public void save(Persistent persistent) { session.saveOrUpdate(persistent);
}
回答:
尤里卡,我找到了!
问题如下:
表中的数据ThirdClass
未正确保留。由于此数据是通过MyDbObject引用的
optional = false
Hibernate进行了内部联接,因此为联接返回空结果。因为数据是在一个会话中执行的(我想是在缓存中),所以没有问题。
MySQL不强制执行外键完整性,因此不会抱怨插入损坏的数据。
解决方案:可选=正确或正确插入数据。
以上是 “不存在具有给定标识符的行”,尽管确实存在 的全部内容, 来源链接: utcz.com/qa/418793.html