我有一個有孩子的對象,其中一些沒有加載懶。現在我有一種情況,我需要一個父對象一次加載所有的孩子。有沒有快速的方法來做到這一點,沒有檢查所有的屬性Hibernate.isInitialized()
?是否有可能加載沒有迭代的所有惰性屬性的對象?
謝謝
我有一個有孩子的對象,其中一些沒有加載懶。現在我有一種情況,我需要一個父對象一次加載所有的孩子。有沒有快速的方法來做到這一點,沒有檢查所有的屬性Hibernate.isInitialized()
?是否有可能加載沒有迭代的所有惰性屬性的對象?
謝謝
我會用Hibernate.initialze(..)
,但你也可以序列化對象(使用ObjectOutputStream
或XMLEncoder
。序列化機制會遍歷所有的屬性,它們將被初始化。您可以使用commons-郎SerializationUtils
。
你是如何得出該物體?
這種通用方法(它通常被稱爲對象的「水化」)是要求一個連接抓取。這也正是ORM檢索子對象的數據與此同時通過使用連接爲父母提供數據,並使用這些數據來熱切地初始化孩子。
有不同的方法來索要連接抓取,主要提供者特有的,但你可以write it into portable JPQL:
select p from Parent p join fetch p.children where ...
但是,請注意,這將每個父多次返回 - 儘可能多的,因爲它有子。這有點奇怪,但它是如何工作的。
我同意湯姆,我使用fetch連接來取回我想要初始化的子對象。至於帶回多個Parent對象的查詢,我相信添加一個「DISTINCT」子句應該可以解決這個問題。
thanx的回覆,但對於Hibernate.initialize(屬性),我仍然必須給一個屬性,這是我想避免的。序列化的東西可能會起作用。這似乎是一種黑客解決方法來實現這一目標? – Julia 2011-04-19 12:48:39
@Julia - 是的。我不知道任何非解決方法 – Bozho 2011-04-19 12:49:15