我有像
这样的域对象public class Person{
private String name ;
private Integer age;
}
我有像
这样的DAO标准{
Criteria c = sesseion.createCriteria(Person.class);
c.setProjection(Projections.distinct(Projections.projectionList().add(Projections.property("age"))));
List<Object> rows = c.list();
for(Object obj:rows){
if ((obj != null) && (obj instanceof HibernateProxy))
{
doSomething...
}
}
}
当我在运行模式下运行时,它可以工作,但是当我在“if”条件行设置调试点时,它显示我得到的obj是Person类,而不是HibernateProxy。然后它在调试模式下失败。
为什么一个对象在运行模式和调试模式下显示为不同的实例形式?
答案 0 :(得分:1)
Hibernate最初加载类的代理(基于加载策略),当你在该代理上调用某个方法时,它实际上加载了原始对象。在调试模式下,eclipse使用内省(调用字段或setter或getter)。
在你的情况下toString()
在代理被调用,它在内部使用该类的其他字段,因此,hibernate加载原始对象。