最近在用SSH框架写一个物流项目,在开发过程中遇到如下异常
java.lang.IllegalStateException: Cannot call isReadOnlyBeforeAttachedToSession when isReadOnlySettingAvailable == true [bos.entity.bc.Staff#sos-0001]
起初以为是Fastjson在转化数据时与hibernate的关联查询导致死循环所致,沿着这条思路终未解决
于是只好粘贴异常信息到百度查找,发现并没有与之相关的解决方案,所以只好自行解决
苦恼了半天终于解决了该问题,闲话不多少,上方案
解决方案
该异常是Hibernate懒加载异常所致
<many-to-one name="staff" class="bos.entity.bc.Staff" fetch="select">
<column name="staff_id" length="32" />
</many-to-one>
在对应实体映射配置文件中,关闭懒加载即可如下
<many-to-one name="staff" class="bos.entity.bc.Staff" fetch="select" lazy="false">
<column name="staff_id" length="32" />
</many-to-one>
总结
后研究发现,这是hibernate懒加载的一个普遍异常
凡表之间存在多对一关系,都需要在多方实体映射配置文件中关闭对应属性的懒加载,否则均会报以上异常
因为被这个异常搞得我太头疼了,网上也没有解决方法,特写此博客,希望遇到与我相同问题的朋友,都有迹可查!