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语句有错,哪位大侠帮帮我看看把
但是有一个特殊的需求需要一次性的构造一个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语句有错,哪位大侠帮帮我看看把
...全文
相关推荐
Hibernate笔记
hibernate的详细记录,很实用的哦! 如果您需要就下吧!
ActiveMQ消息队列的核心概念
Message Queue消息队列简称MQ,消息队列从字面的含义来看就是消息的发生和接收保持排队顺序。消息队列可以简单的理解为把要传输的数据放在队列中一一发送。**消息:**要传输的数据。**队列:**先进先出的数据结构。在消息队列中,数据放到消息队列叫做生产者,从消息队列中获取数据叫做消费者。消息队列是一种异步的服务通信方式,是分布式系统中重要的组件,主要解决的问题包含:应用解耦、异步消息、流量削锋等问题,实现高可用、高性能、可伸缩和最终一致性的架构。
Hibernate之数据加载方式
NULL 博文链接:https://javakeith.iteye.com/blog/860140
hibernate 3.2 中文文档 api 官方的
hibernate 3.2 中文文档 api 官方的 绝对是中文的
Hibernate入门
对hibernate初学者又极大的作用!


