小编典典

“不存在具有给定标识符的行”,尽管确实存在

hibernate

我正在使用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);
}

阅读 652

收藏
2020-06-20

共1个答案

小编典典

尤里卡,我找到了!

问题如下:

表中的数据ThirdClass未正确保留。由于此数据是通过MyDbObject引用的

optional = false

Hibernate进行了内部联接,因此为联接返回空结果。因为数据是在一个会话中执行的(我想是在缓存中),所以没有问题。

MySQL不强制执行外键完整性,因此不会抱怨插入损坏的数据。

解决方案:可选=正确或正确插入数据。

2020-06-20