我正在使用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引用的
ThirdClass
optional = false
Hibernate进行了内部联接,因此为联接返回空结果。因为数据是在一个会话中执行的(我想是在缓存中),所以没有问题。
MySQL不强制执行外键完整性,因此不会抱怨插入损坏的数据。
解决方案:可选=正确或正确插入数据。