Hibernate常见问题 No row with the given identifier exists问题的原因及解决

来源:互联网 发布:立体交通网络 编辑:程序博客网 时间:2024/04/29 14:47


(1)在学习Hibernate的时候遇到了这个问题“No row with the given identifier exists”在网上一搜看到很多人也遇到过这个问题!

问题的原因肯定是有多种,以下解决比较可能的原因!


(2)我说一下当时我出现错误的时候,是利用hibernate动态创建数据库的,错误提示的信息是对象未找到而发出异常!

然后后边的是未找到的文件路径,但是仔细检查并没有错误!但是看下边的解释错误出现的原因:SessionFactoryImpl还有SessionImple有关的

这就快很容易想到是因为处理数据库的原因造成的!然后在看到最后的一个错误 即是我项目下的TestMain.java:16 处点进去!恍然大悟 原来是我调用的函数是“删除操作”(想把自己hu死!!) 想一下我的数据库是动态创建的一开始肯定没有数据 所以出现删除失败!

(3)通过我解决问题的方法,大家的问题也很可能是操作数据库表示出现的错误!

(4)试想一下! 

1.假设有两张表,table1和table2.产生此问题的原因就是table1里做了关联table2的时候(一对一或者是 多对一).当hibernate通过table1查找的时候,table2里的数据没有与table1相匹配的,这样就会报No row with the given identifier exists这个错.(一句话,就是数据的问题!)

        2.假如说,table1里有自身的主键id1,还有table2的主键id2(作为table1的外键),这两个字段.

        3.如果hibenrate设置的单项关联,即使table1中的id2为null值,table2中id2中有值,查询都不会出错.但是如果table1中的id2字段有值,但是这个值在table2中主键值里并没有,就会报上面的错!

        4.如果hibernate是双向关联,那么table1中的id2为null值,但是table2中如果有值,就会报这个错.这种情况目前的解决办法就是改成单项关联,或者把不对应的数据改对!

5.假如说我判断一下,如果遇到创建人id传过来为空值,我判断如果是空值,我把创建人id设为0,但是用户表中userid是主键从1开始自增的,那么这样数据就对应不上了,一查就会出这个错了.这个错在开发刚开始的时候经常发生,因为每个人的模块都是由相应的人独立开发完成以后再整合在一起的,每个人写单独那一块的时候往往会忽略这些,所以整合的时候这些问题往往就都一下子全冒出来了!

        6.这就是报这个错的原因了,知道原因了就相应的改就行了!

(5)在(4)中已经列举了几个出现这个问题的原因 可能遇到的问题的原因并不是这些但是根本原因是操作数据库的时候出现错误!自己好好检查数据库的操作希望能成功!



4 0