我有一个有孩子的物品,其中一些不装懒。现在我有一种情况,我需要一个父对象一次加载所有的孩子。是否有快速方法可以在不检查所有属性的Hibernate.isInitialized()
的情况下执行此操作?
谢谢
答案 0 :(得分:0)
我会使用Hibernate.initialze(..)
,但您也可以序列化对象(使用ObjectOutputStream
或XMLEncoder
。序列化机制将迭代所有属性并初始化它们。您可以使用公共-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”子句应该解决这个问题。