当im使用Intellij步进hibnerate对象时,该对象在调试窗口中显示为null。标记为$$_hibernate_interceptor
假设我有一些简单的代码,如下所示
Subscription subscription = subscriptionRepository.getOne(1l);
log.info("add breakpoint debug code stopped here")
我希望查看从subscriptionRepository返回并分配给Debug:
窗口中的订阅对象的值。
查看屏幕截图,显示了这在我的计算机上的样子。
正如您所看到的,大多数变量值似乎是空的,但是如果我对订阅对象执行toString(),它将在inteceptor窗口中输出标记为null的值。所以它们并不是真的空的。
这里有几个问题
$$_hibernate_interceptor
进一步的调查结果
只有当我使用默认的repository.getOne
时,才会返回拦截器。如果我使用findBy或我自己的findByField,它不会调用拦截器并在调试窗口中显示值。
这里发生了什么,为什么getOne显示拦截器,而其他人不显示?
可以看到,订阅的类型是Subscription$HibernateProxy$...
。这是因为Hibernate在使用属性时会从数据库中延迟加载属性。
在第一次访问它们之前,比如在tostring()
中,它们将为空。您可以通过在“subscription.toString()”上添加一个变量监视(小的+图标)来轻松地避开这个问题。
findbyid
和getone
之间的区别在于前者返回一个惰性代理,而后者使用一个热切加载的对象。一些关于原因的信息可以在这里找到。
我想使用Eclipse调试器逐步分析Oracle JDK实现的一些类。 因此,我从Oracle(JDK1.8.0_77)下载了当前的JDK,通过Windows安装程序安装了Eclipse并编写了一个简单的HelloWorld类。 我将Eclipse配置为使用JDK中包含的JRE,而不是标准的JRE,并确保步骤过滤器既不在首选项中设置,也不在调试视图中应用,如以下答案所述: Eclipse步进调试
我正在尝试使用IntelliJ调试Spring Boot项目。突然,我的线路在工作了几年后无法调试。 它将通过类进行调试,但当我尝试运行一个方法时,它不会看到断点。我之前收到了一个应用程序上下文消息,我修复了它,但它仍然不起作用。https://www.jetbrains.com/help/idea/2021.2/spring-support.html#spring-file-set 它将在后台看
我正在尝试使用智能 J 调试我的 Java 服务器。每次我启动调试器时,它都会显示: 运行游戏调试时出错:无法打开调试器端口:java.net。ConnectException“连接被拒绝:连接” 我关闭了Windows防火墙以及防病毒扫描程序,但它仍然显示错误。
问题内容: 我想在异步for循环遍历Javascript对象的值完成执行后调用一个函数。我有以下代码 问题答案: 这可以在普通JS中完成,但是我建议使用模块,它是用于处理Node.js中异步代码的最流行的库。例如,使用: 如果要使用每次迭代的结果,则类似,但是将结果数组传递给回调的第二个参数。 如果您喜欢香草JS,则可以代替: (摘自我前段时间写的要点) 我强烈建议您使用异步库。异步很容易编写,类
我试图用IntelliJ远程调试liquibase项目的maven插件。问题是IDEA突出显示了错误的源代码行,我不知道为什么。我试图调试的源代码没有被触及。我从我在IntelliJ中使用的源代码中手动构建并安装了本地maven存储库中的插件。我的Intellij版本是,maven版本是,运行在Ubuntu12.04上。 为了调试maven插件,我使用了comand。如果有人对什么是错误有一丁点的