com.sun.jdi.InvocationException occurred invoking method.

来源:互联网 发布:逆战淘宝 编辑:程序博客网 时间:2024/06/06 04:50

com.sun.jdi.InvocationException occurred invoking method.

标签: Javahibernate
 6802人阅读 评论(2) 收藏 举报
 分类:
 

前几天遇到一个问题,错误信息如下:


习惯性的上网搜了一下解决方法,之后发现大多数帖子、博客都说是hibernate懒加载造成的问题,更搞笑的是解决方案竟然是将lazy="false"。。。

对于这种治标不治本的解决方法,我无力吐槽,只能一笑而过了。。。

之后回头好好看了看错误信息,发现Bug其实已经很明显了,就是ID为[4028810749dfa59c0149dfaf16810004]的OrgInfo对象不存在呗。。。

于是debug调试了下,发现是在此处OrgInfoModify获取OrgInfo对象时导致的问题,此时OrgInfo对象的值为com.sun.jdi.InvocationException occurred invoking method.

[java] view plain copy
 print?
  1. for (OrgInfoModify orgInfoModify : modifyList) {  
  2.     OrgInfo orgInfo = orgInfoModify.getOrgInfo();  
  3.     if (orgInfo != null) {  
  4.         if(!groupOrgId.equals(orgInfo.getObjId())) {  
  5.             resList.add(orgInfoModify);  
  6.         }  
  7.     }  
  8. }  

忘了说,由于是二次开发的项目,所以对源代码不是很熟悉,只能针对问题去看某一模块的代码片段。。。

于是翻开OrgInfoModify的源码,发现OrgInfoModify与OrgInfo是多对一的关系:

[java] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. /** 机构 */  
  2. @ManyToOne(fetch=FetchType.LAZY, optional=true)  
  3. @JoinColumn(name="ORG_INFO_ID"// 关联的外键  
  4. @BatchSize(size = 15// 批量抓取  
  5. private OrgInfo orgInfo;  

于是根据错误提示信息,在OrgInfo表中查找ID为[4028810749dfa59c0149dfaf16810004]的记录,记录不存在,所以懒加载的时候导致对象无法成功加载。

这个时候出错的原因已经很明显了,接下来就是解决数据缺失的问题了,而非像网上大多数说的将lazy属性设置为false。

0 0
原创粉丝点击