Java ObjectNotFoundException:Hibernate中不存在具有给定标识符的行

Java ObjectNotFoundException:Hibernate中不存在具有给定标识符的行,java,hibernate,Java,Hibernate,我有下一个问题: String queryString = "from Visit vis " + "LEFT OUTER JOIN FETCH vis.pdv vis_pdv "; return query.list(); 之后,当我尝试访问某些pdv时,会出现下一个错误: nested exception is org.hibernate.ObjectNotFoundException: No row with the given identifie

我有下一个问题:

String queryString = "from Visit vis "
                    + "LEFT OUTER JOIN FETCH vis.pdv vis_pdv ";
return query.list();
之后,当我尝试访问某些pdv时,会出现下一个错误:

nested exception is org.hibernate.ObjectNotFoundException: No row with the given identifier exists
关键是我有一些损坏的数据,所以“Visit”有时在“pdv”中有一个id,但表“pdv”中不存在该pdv。我想在查询中处理这个问题,这样它就不会返回损坏的数据。有办法吗


感谢您在hibernate中使用join In In HQL时返回列表,因此请将您的返回状态转换为return

List<Object[]> query.list(); 
List query.List();
和重新运行类型为

List<Object[]>
列表
还有你的问题 像这样试试

从访问vis、Pdv Pdv中选择vis,其中vis.id=Pdv.vis.id

此查询将返回

List<Visit>
列表

这里有一个类似的问题:

基本上,答案是:在Hibernate处理数据之前,您需要有一个一致的数据库

我知道您有一个
Visit.pvd
列,它是
pvd
表中的外键,但包含未反映在
pvd
中的数据。那是你的诚信被侵犯了。您可以做的是收集任何识别无效实体的
Visit.id
s:

session.createSQLQuery("SELECT id FROM Visit "
        + "WHERE pvd NOT IN (SELECT p.id FROM pvd)").list();
这将获得一个
列表
,您可以迭代该列表以获取有问题的实体。使用它来
更新
它们,使其不包含无效引用(或者只使用一个简单的
更新
和我给出的
WHERE
子句)

字符串queryString=“来自访问vis” +“左外部联接获取vis.pdv”; 返回query.list()

您不需要将
列表
作为返回的
列表

列表
从查询返回多个对象时需要


例如
从访问v中选择v.pid、v.pname、v.pvisit

谢谢。我在Pdv中没有要访问的引用,只是访问Pdv中的引用我没有得到,你的意思是访问是Pdv的子表吗?Pdv的密钥处于Visit或仅参考状态,无外键约束
List<Object[]>