是否可以在没有迭代的情况下加载具有所有惰性属性的对象?

时间:2011-04-19 09:32:14

标签: java hibernate lazy-loading

我有一个有孩子的物品,其中一些不装懒。现在我有一种情况,我需要一个父对象一次加载所有的孩子。是否有快速方法可以在不检查所有属性的Hibernate.isInitialized()的情况下执行此操作?

谢谢

3 个答案:

答案 0 :(得分:0)

我会使用Hibernate.initialze(..),但您也可以序列化对象(使用ObjectOutputStreamXMLEncoder。序列化机制将迭代所有属性并初始化它们。您可以使用公共-lang SerializationUtils

答案 1 :(得分:0)

你是如何获得这个对象的?

对此的一般处理方法(它通常称为对象的“水合作用”)是要求连接提取。这就是ORM通过使用连接同时检索子对象的数据的位置,并使用数据来急切地初始化子对象。

有多种方法可以要求加入提取,主要是提供商特定的,但您可以write it into portable JPQL

select p from Parent p join fetch p.children where ...

但是,请注意,这将多次返回每个父级 - 尽可能多次返回子级。这有点奇怪,但它是如何工作的。

答案 2 :(得分:0)

我同意Tom,我使用fetch join来恢复我想要初始化的子对象。至于查询带回多个Parent对象,我相信添加一个“DISTINCT”子句应该解决这个问题。