Hibernate常见问题 No row with the given identifier exists问题的一次实战

   最近接到了一个需求,说是网站点击链接报错,经过数据追踪后发现是因为数据展示的时候,是联合了多张表的数据进行展示,在点击链接时根据写死的值去数据库查找对象,这次查找的对象表关联了很多其它表的数据,是多对多的关系,两张表在hibernate.hbm.xml配置为了双向多对多,数据来源是通过很多层的数据表相关联产生的,比如链接直接指向的表对象为A,A表又和B表形成双向多对多,B表又和C表形成单项多对多.....这样层层关联了很多数据,链接跳转报错时,在后台出现了No row with the given identifier exists 错误提示,我就去查看了数据表的配置关联,关系如图:

 

 

可以看到,BussPublicCase 与BussPublicInfo之间是双向多对一的关系,而在BussPublicInfo与BussDir之间又是单向多对一,因为BussDir没有指向前两张表的数据所以就不上图了,下面是运行时后台报的错

分析可以得出,是因为通过查找BussPublicCase 对象关联到BussPublicInfo对象时,因为BussPublicInfo又关联了BussDir,因为是单项多对一,而且没有指明关联的属性,所以默认为关联到BussDir的主键上,而主键不能为null,所以推测在BssPublicInfo 的关联列中混入了BussDir主键所没有对应的数据,于是进行了查询

果然有发现一些关联的列对不上的数据,正是链接访问时读取了这些没关联上的数据所以才会报错,数据来源因为不在这次需求范围之内所以暂且先不去细究,将没关联上的数据删掉后,网站跳转链接恢复了正常,下面是参考别人的资料,关于应对这种情况的解决方法,资料出处:http://www.cnblogs.com/zsychanpin/p/7049141.html 

 


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

问题的解决办法肯定是有多种,下面解决比較可能的原因。

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

 

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

 

这就快非常easy想到是由于处理数据库的原因造成的!然后在看到最后的一个错误 即是我项目下的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)中已经列举了几个出现这个问题的解决办法 可能遇到的问题的解决办法并非这些可是根本原因是操作数据库的时候出现错误!自己好好检查数据库的操作希望能成功。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值