Hibernate3:关于想一次性把设置了lazy load的对象一次性全部load回来的问题(关于HQL left join fetch的问题)

crab_hn crab_hn 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我在项目里面使用了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语句有错,哪位大侠帮帮我看看把

...全文

相关推荐

评论 1
收藏 已收藏
分享
返回顶部
crab_hn
Java EE 67,535 成员 225,843 内容