问题描述:
使用hibernate 查询结果集,对象中存在@onetoMany 的情况,使用lazy模式或者eager模式加载
在执行过程中sql都能完整的执行,而最终报异常的地方都是在com.alibaba.com.caucho.hessian.io.CollectionDeserializer.readLengthList这个地方
hibernate异常为failed to layzily initialize a collection ,no sesssion or session was closed
dubbo是远程调用 把对象组装好传输POJO 不要把Hibernate返回的对象直接用于传输
如果非要如此, 可以试试用JSON序列化/反序列化
特别是provider代码如果用到guava的lazy的集合视图,返回给调用方,会出现类似的反序列化失败的问题。因为延迟的集合实现,可能在consumer端压根不存在。
在for循环中调用,客户端四次请求,三次请求成功,一次序列化失败,数据都一样的,单个请求就没事,这个我很诧异
这是hessian序列化问题,准确说是因为使用了hibernate,hibernate一对多、多对多等不是原生的List/Set
解决方案: