前几天遇到一个问题,错误信息如下:
习惯性的上网搜了一下解决方法,之后发现大多数帖子、博客都说是Hibernate懒加载造成的问题,更搞笑的是解决方案竟然是将lazy="false"。。。
对于这种治标不治本的解决方法,我无力吐槽,只能一笑而过了。。。
之后回头好好看了看错误信息,发现Bug其实已经很明显了,就是ID为[4028810749dfa59c0149dfaf16810004]的OrgInfo对象不存在呗。。。
于是debug调试了下,发现是在此处OrgInfoModify获取OrgInfo对象时导致的问题,此时OrgInfo对象的值为com.sun.jdi.InvocationException occurred invoking method.
[java] view plaincopyprint?
for (OrgInfoModify orgInfoModify : modifyList) {
OrgInfo orgInfo = orgInfoModify.getOrgInfo();
if (orgInfo != null) {
if(!groupOrgId.equals(orgInfo.getObjId())) {
resList.add(orgInfoModify);
}
}
}
忘了说,由于是二次开发的项目,所以对源代码不是很熟悉,只能针对问题去看某一模块的代码片段。。。
于是翻开OrgInfoModify的源码,发现OrgInfoModify与OrgInfo是多对一的关系:
[java] view plaincopyprint?
@ManyToOne(fetch=FetchType.LAZY, optional=true)
@JoinColumn(name="ORG_INFO_ID")
@BatchSize(size = 15)
private OrgInfo orgInfo;
于是根据错误提示信息,在OrgInfo表中查找ID为[4028810749dfa59c0149dfaf16810004]的记录,记录不存在,所以懒加载的时候导致对象无法成功加载。
这个时候出错的原因已经很明显了,接下来就是解决数据缺失的问题了,而非像网上大多数说的将lazy属性设置为false。
该贴被当风筝没有风编辑于2015-8-27 14:58:49