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[]>