Hibernate3:关于想一次性把设置了lazy load的对象一次性全部load回来的问题(关于HQL left join fetch的问题)
我在项目里面使用了openSessionInView的模式,并把对象的子对象set全部加上了lazy load,
但是有一个特殊的需求需要一次性的构造一个Detached的对象,然后我想在DAO里面新建一个loadObjectById的方法可以返回一个Detached的对象(新建一个session,方法返回前关闭session)
但是hibernate的load方法是默认使用lazy load的,所以我就打算使用left join fetch来返回完整load的对象。
我的对象体系大概的代码如下:
class A
{
...
set bSet;
set cSet;
set dSet;
}
class B
{
...
set eSet
set fSet
}
class C
{
...
set gSet;
}
A 一对多 B C
我想一次性把A全部load出来
然后我看了hibernate的HQL文档照着写了下面的语句:
from A as a left join fetch a.bSet bset
left join fetch bset.eSet
left join fetch bset.fSet
left join fetch a.cSet cset
left join fetch cset.gSet
left join fetch a.dSet
where a.id = ?
可以正常运行但是去读取a的bSet cSet dSet的时候还是会出现lazy load的exception
我就试验了一下把其他的left fetch去到,只留下一个:
from A as a left join fetch a.bSet bset
where a.id = ?
这时候对bSet就能够正确的读取不会出现 lazy load的exception
是不是我构造的hql语句有错,哪位大侠帮帮我看看把