关于org.hibernate.ObjectNotFoundException: No row with the given identifier exist
最近由于项目升级,外部接口变动,于是对数据库表的数据进行了一定的更新操作,当然,没有改变表的结构,后来部署时,即报错如下:
Java代码
严重: Servlet.service() for servlet default threw exception
org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [com.iss.fit.po.system.SysDepartment#361]
at org.hibernate.impl.SessionFactoryImpl$1.handleEntityNotFound(SessionFactoryImpl.java:377)
at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:145)
at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:179)
at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:103)
at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:878)
at org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:846)
at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:557)
at org.hibernate.type.EntityType.resolve(EntityType.java:379)
这类错误一般分两种, 即Servlet.service() for servlet default threw exception,第一种是jsp页面绑定元素错误,当然这种的错误会报的非常清楚,xx.jsp(xx,xxx)的哪个地方错误;第二种即这里的这种,哪个对实体类的映射对象#xx报错,这里的#xx,如#4,#5等等,并非固定的,来我这里的来说是SysDepartment#361,即我的A表与SysDepartment有关联,并且A表中,有一条数据,关联的SysDepartment的ID为361,所以查询引用时拿不到,就会报出上面的错误。www.zzzyk.com
所以解决办法也比较简单,我这里是更新过SysDepartment表了,所以,它不存在ID为361的数据了,那么它的关联表A中,A.SysDepartment_ID这一列数据,也不存在A.SysDepartment_ID=361的,所以,你把A.SysDepartment_ID设置为SysDepartment表中新更新的数据的ID就好了,或者你在手动添加一条ID为361的,都是可以的。
补充:软件开发 , Java ,