版权声明:本文为博主原创文章,未经博主允许不得转载。
前几天遇到一个问题,错误信息如下:
习惯性的上网搜了一下解决方法,之后发现大多数帖子、博客都说是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。
本文详细分析了一个在使用Hibernate进行数据库操作时遇到的异常问题,即com.sun.jdi.InvocationException,通常被误认为是由懒加载引起,但实际原因在于目标对象不存在。通过深入理解错误信息并进行调试,最终找到了问题根源并解决了数据缺失的问题,避免了治标不治本的方法。
454





