2012-01-18 102 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()创建表达式)。