分类:
版权声明:本文为博主原创文章,未经博主允许不得转载。
前几天遇到一个问题,错误信息如下:
习惯性的上网搜了一下解决方法,之后发现大多数帖子、博客都说是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;
这个时候出错的原因已经很明显了,接下来就是解决数据缺失的问题了,而非像网上大多数说的将lazy属性设置为false。