hibernate代理对象纠错过程

前两天同事遇见一个诡异现象,导入excel时,其他数据均没问题,只有一条出现职位为空的现象。

数据结构如下,OrgStation和orgUnit为双向关系。



public class Employee{
private OrgStation majorStation;
}

public class OrgStation {
private OrgUnit unit;
}

public class OrgUnit {
private OrgStation leaderStation;
}



错误现象为:其他所有的employee对象经过sql fetch出来以后的majorStation都是真实对象,而唯有一条employee的majorStation为代理对象。

sql语句如下:

String hql = "from Employee as user "
+ "left join fetch user.majorStation ms "
+ "left join fetch ms.unit unit ";


错误很明显就是这个代理对象在fetch之前已经进入内存了。但是只执行了一条sql语句为什么会进来,百思不得其解。

纠结了10分钟之后,发现原来是unit里面的leaderStation问题。因为只fetch到unit层。unit里面的leaderStation为代理对象。

而employee里面为代理对象的职位正好是部门的领导职位,也就是fetch unit时候被代理的对象。到此真相大白。。

sql语句改为后错误解除。

String hql = "from Employee as user "
+ "left join fetch user.majorStation ms "
+ "left join fetch ms.unit unit "
+ "left join fetch unit.leadStation ls";



总结一下,hibernate的错误归根结底就是那么几个,但是表现的错误形式各不相同。这个错误形式算是第一次见到。

而且还和excel的数据顺序有关,试想如果领导永远是排在第一个导入,这个错误压根也不会出现。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值