2011-01-25 145 views
1

我的hibernate映射和查詢有問題。 我有一個與B和C有關係的對象A.Hibernate獲取鏈接對象的對象

獲取模式是懶惰的(@ManyToOne(fetch = FetchType.LAZY)),我無法更改它。 所以我的問題是未來:

當我通過get方法(hibernateDao.get)得到一個對象,我得到的對象A whitout與B和C.關係

如果我創建了一個標準,我強迫的關係與criteria.setFetchMode(...)以只查詢獲取所有。但是我已經在網上看到,通過主鍵獲取對象的標準並不是一件好事。

如何用get方法獲得?

謝謝。

+0

請注意,這與J2EE有關。並非每個問題都需要用J2EE進行標記。無論如何,[J2EE已經死了多年](http://en.wikipedia.org/wiki/Java_Platform,_Enterprise_Edition#Nomenclature.2C_standards.2C_and_specifications)。 – 2011-01-25 09:56:58

回答

2

您可以使用獲取配置文件有提取模式設置爲懶爲默認值,並急於與某個具體查詢:http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#d0e3524

如果您使用的是Hibernate的版本不支持獲取配置文件,您總是可以做一個HQL查詢,它使用連接檢索你需要的樹。

但我已經在網上看到,通過主鍵獲取對象的標準是不是一件好事。

在排除某個解決方案之前,我會非常小心,因爲您只是因爲讀了某個地方說它「不好」而已。這可能是在最後一件壞事,但如果你不明白爲什麼這是不好的,你可能會被排除這是您的具體情況;-)

+0

FetchProfile看起來不錯,但我的版本不支持它像註釋(用XML提供)(3.2):(條件保持一個很好的解決方案。 – Kiva 2011-01-25 13:39:33

0

呼叫Hibernate.initialize();

例做了一個解決方案:

myEntity = hibernateDao.get...; 
Hibernate.initialize(myEntity); 

這將強制hibernate加載myEntity中的所有映射實體。