2012-01-18 98 views
1

我在java中使用hibernate。我通過運行諸如from MyObject where field='name'的查詢來獲取對象列表。這成功運行,當我做list.size()時,它也返回1.但是當我做list.get(0)我得到一個所有字段爲空的對象。在調試時,當我將鼠標懸停在對象上時,它顯示如下:com.xyz.data.MyObect_$$_javasassit_11。這是什麼意思?

回答

0

它是由Hibernate爲您創建的代理類。這允許休眠(除其他外)緩存數據和延遲加載實例變量數據等。

1

這是Hibernate如何實現lazy loading的副作用。 com.xyz.data.MyObect_$$_javasassit_11是由Hibernate創建的子類,它重寫了所有首先確保實體已加載的方法,然後將調用tp轉發給實際實例。

通常這是透明的,但在某些情況下它可能很重要。其中最常見的是令人生畏的LazyInitializationException。如果您的調試器支持監視表達式,則可以使用訪問器方法獲取字段的實際值(而不是查看字段xmyobject.getX()創建表達式)。