2011-08-14 59 views
1

我有一個實體A,它是實體B和C的超類,A用@Inheritance(strategy = InheritanceType.JOINED)註釋。加載休眠實體的子類問題

然後另一個實體X具有相對於A.

我設置XA B型的一些對象,但是當我加載的x,並檢查類型爲XA它是A,我不能將其轉換爲乙

我做了很多這樣的映射之前,它正常工作不知道這裏的問題是什麼。

此外,當我做entityManager.find(A.class,id)時,它也返回A,雖然有一個實體B具有相同的id,但是當我從Junit測試運行它時返回B,但在運行應用程序時不會在tomcat服務器上。

+1

給我們一些代碼來分析。 –

回答

0

您將與Hibernate的懶加載機制方面遇到這個問題。 Hibernate將每個懶惰加載的對象封裝到一個所謂的代理對象中。當您從數據庫加載x時,您的對象x.a將是HibernateProxy類型。

我發現這個解決方案很有用(類似於@阿卜杜拉的)。

How to unproxy a hibernate object

你也可以預先抓取關係x.a來避免這個問題,因此不會有創建代理對象。