com.sun.jdi.InvocationException occurred invoking method.

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


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

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

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

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

for (OrgInfoModify orgInfoModify : modifyList) {
	OrgInfo orgInfo = orgInfoModify.getOrgInfo();
	if (orgInfo != null) {
		if(!groupOrgId.equals(orgInfo.getObjId())) {
			resList.add(orgInfoModify);
		}
	}
}

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

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

/** 机构 */
@ManyToOne(fetch=FetchType.LAZY, optional=true)
@JoinColumn(name="ORG_INFO_ID") // 关联的外键
@BatchSize(size = 15) // 批量抓取
private OrgInfo orgInfo;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值