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

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

回到顶部