gpt4 book ai didi

java - 为什么我在运行模式下得到 HibernateProxy 对象,但在 Debug模式下得到域。这是怎么发生的

转载 作者:行者123 更新时间:2023-12-01 11:10:52 39 4
gpt4 key购买 nike

我有像这样的域对象

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。然后在 Debug模式下失败。

为什么一个对象在运行模式和 Debug模式下显示为不同的实例形式?

最佳答案

Hibernate 最初加载类的代理(基于加载策略),当您在该代理上调用某些方法时,它实际上加载原始对象。在 Debug模式下,Eclipse 使用内省(introspection)(调用字段或 setter 或 getter)。

在您的情况下,代理上的 toString() 被调用,它在内部使用该类的其他字段,因此,hibernate 加载原始对象。

关于java - 为什么我在运行模式下得到 HibernateProxy 对象,但在 Debug模式下得到域。这是怎么发生的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32403835/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com