发新话题
移动帖子 加入精华 加入置顶 加入收藏 关注此帖

很奇怪的Lazy Loading 异常~



很奇怪的Lazy Loading 异常~

Exception in thread "AWT-EventQueue-0" 2008-02-21 11:28:05,951 ERROR org.hibernate.LazyInitializationException:19  -> could not initialize proxy - no Session
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
Spring框架
用Hibernate取数据,相应的数据结构是:
class Delivery{
    List deliveryItems;
    Order order;
}
class Order{
   List orderItems;
}
class OrderItem/DeliveryItem{
    Ware ware;
    BigDecimal amount;
}
然后,使用一下HQL取数据:
from Delivery d
 left join fetch deliveryItems di
 left join fetch di.ware
 left join fetch d.order o
 left join fetch o.orderItems oi
 left join fetch oi.ware
取出来的数据有问题了,除了开头那个异常。
Debug进去查看数据发现某个orderItem没有load出来ware(显示时带$的class,各个field是null)。
问题:
总共有7个items的,为什么只有一个没有load出来呢?
7个item关联的ware除了sid,名字不一样以外,都是一样的:基本可以排除非法数据的原因了吧。

这个问题以前也见过,找不到原因,是单独在fetch一下ware暂时解决的。

在这提出这个问题,看看版主及各位达人有什么建议没?

谢谢关注~
编辑 回复 快速回复 TOP

Re:很奇怪的Lazy Loading 异常~

补充说明:实际的HQL还join了其他东西,有15个join fetch之多,按深度算,最深的是3层,OrderItem是2层。不知道这个有没有关系~
编辑 回复 快速回复 TOP

Re:很奇怪的Lazy Loading 异常~

只有在session,lazy的才能保证能读取到,一旦脱离session,就无法保证了。
单独fetch倒不必,你读一下那个ware就行了,hibernate就会填充数据了!

我一般很少用lazy, 对于大数据量的表,我宁可不关联。单独存取
对于小表,我一般全部eager, 决不lazy, 多占用不了多少内存的
对于附件,我全部存到磁盘上
快乐渡过每一天,减肥坚持每一天
编辑 回复 快速回复 TOP

Re:很奇怪的Lazy Loading 异常~

好像默认的 outer join fetch depth 是 2 吧!!

快乐渡过每一天,减肥坚持每一天
编辑 回复 快速回复 TOP

Re:很奇怪的Lazy Loading 异常~

我也不是想用lazy啊:我fetch了
我就是想用到的都fetch出来,然后直接就用了(因为CS结构啊,一边取一边用,想懒也不行的
编辑 回复 快速回复 TOP

Re:很奇怪的Lazy Loading 异常~

我们很多是A引用B,B引用A的,所以用eager不合适吧
我们是lazy,然后用到的东西手动(left)join出来

hibernate.max_fetch_depth没设,查了一下文档,没说有default值

编辑 回复 快速回复 TOP

Re:很奇怪的Lazy Loading 异常~

没关系的,你不用担心会出现什么循环。

数据结构很重要。
快乐渡过每一天,减肥坚持每一天
编辑 回复 快速回复 TOP

Re:很奇怪的Lazy Loading 异常~

“hibernate.max_fetch_depth: Set a maximum "depth" for the outer join fetch tree for single-ended associations (one-to-one, many-to-one). A 0 disables default outer join fetching.
eg. recommended values between 0 and 3
编辑 回复 快速回复 TOP

Re:很奇怪的Lazy Loading 异常~


没办法了

还是用老办法解决了
觉得Hibernate有时候也不是很好;可能是我理解不到位吧
编辑 回复 快速回复 TOP

Re:很奇怪的Lazy Loading 异常~

严重同情lz.
Lazy是万恶物,偏偏我们公司到处都用.
我的Hibernate本来就弱得不行,现在逼得天天看这个,太怨念了喵~~~~
这个人很聪明,什么都没留下.
编辑 回复 快速回复 TOP
发新话题