2011-09-19 32 views
2

我使用的代码 Object object = session.load(Class.forName(javaType), objectId);Hibernate的对象和Java反射

以下行加载懒洋洋地从休眠状态的对象。如果我打印object.getClass().getSimpleName()它显示休眠代理的名称,而不是我的实现类如预期。

但是如果我再使用这个代理对象上反射如下返回的属性叫孩子: List children = (List) object.getClass().getMethod("getChildren", new Class[ {}).invoke(object, new Object[]{});

它返回对象的列表,其中object.getClass().getSimpleName()上的任何对象返回实现类的名称。为什么这些对象不返回代理对象名称?

回答

0

列表本身可以延迟加载,但是如果枚举元素,则需要执行sql查询,并且不会为每个元素创建代理(相反)会有性能增益。