2014-06-11 154 views
-4

我使用反射獲取對象,如下所示。這裏我提取的字段是通過hibernate延遲加載映射的。休眠延遲加載對象的getDeclaredFields()不返回字段

final Field field = clazz.getDeclaredField(fieldName); 
field.setAccessible(true); 
Object obj = field.get(instance); 

然後我用得到的對象如下

obj.getClass().getDeclaredFields() 

但這並不返回我這是在對象中定義的所有字段。這個對象可以是我的JPA實體列表中的任何實體。我相信使用Object而不是鑄造對象存在問題。

我該怎麼做,並獲得這個新發現的對象的所有領域。

+0

我不確定誰投下了這個票。但我想知道解釋。可能是我可以提供更多的信息.​​.爲了更清楚我不知道它應該被鑄入什麼類型。類的類型在字段中,但它的動態 – dinesh707

+0

您是否正在尋找超類的聲明字段而不是當前實際類中的聲明字段? http://stackoverflow.com/a/16966699/504685 – Charlie

+1

請顯示一個簡短但完整的程序來演示問題。 (不,這與鑄造沒有任何關係。) –

回答

0

問題只是反射和休眠不能輕鬆的步驟。

instance代碼中的對象是通過hibernate(延遲加載)獲取的對象。該對象不返回一個真正的java對象,而是一個hibernate代理對象。調用對代理對象的反射會給你帶來完全意想不到的結果。

在評論https://stackoverflow.com/users/424903/gimby指出一個解決方案,可以用來取消代理休眠惰性加載對象。 Converting Hibernate proxy to real object