Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java eclipse在检查变量(调试时)时做什么_Java_Eclipse_Hibernate_Debugging_Hibernate Envers - Fatal编程技术网

Java eclipse在检查变量(调试时)时做什么

Java eclipse在检查变量(调试时)时做什么,java,eclipse,hibernate,debugging,hibernate-envers,Java,Eclipse,Hibernate,Debugging,Hibernate Envers,我有一个org.hibernate.envers.entities.mapper.relation.lazy.proxy.ListProxy的实例,它引起了一些麻烦:每当我以编程方式尝试访问它时,就会出现一个空指针异常(即调用list.size())但是,当我第一次使用Eclipse的变量检查器检查对象时,我看到Hibernate生成了一条SQL语句,并且列表会动态变化。然后一切都开始了。我如何以编程方式做同样的事情?我尝试了list.toString(),但似乎没有帮助 更新1 不知道这是否有

我有一个
org.hibernate.envers.entities.mapper.relation.lazy.proxy.ListProxy
的实例,它引起了一些麻烦:每当我以编程方式尝试访问它时,就会出现一个空指针异常(即调用
list.size()
)但是,当我第一次使用Eclipse的变量检查器检查对象时,我看到Hibernate生成了一条SQL语句,并且列表会动态变化。然后一切都开始了。我如何以编程方式做同样的事情?我尝试了
list.toString()
,但似乎没有帮助

更新1

不知道这是否有帮助,但当我第一次单击显示中的列表实例时:

com.sun.jdi.InvocationException occurred invoking method.
然后数据库查询运行,当我再次单击时,我得到正确的
.toString()
结果

更新2

这是我得到的原始异常(当我没有在调试模式下检查元素时)


好吧,这里发生的事情是,你在深度操作中使用Hibernate的惰性加载:)

基本上,hibernate为您惰性地关联关系加载代理类,这样您就可以得到一个hibernate为您的C类自动生成的代理的列表(实际上是一个PersistenceBag实现),而不是类C的列表。这是hibernate延迟加载该关联值的方法,直到它们被实际访问为止。这就是为什么当您在eclipse调试器中访问它(它基本上通过内省访问实例的字段/methid)时,您会看到sql hibernate触发器来获取所需的数据


这里的诀窍是,根据访问惰性集合的时间,可能会得到不同的结果。如果您使用eclipse调试器访问它,您很可能仍然处于开始加载该东西的Hibernate会话中,因此一切都按预期工作,当访问该东西并加载数据时(延迟地)触发sql)。问题是,如果您想访问代码中的相同数据,但在会话已经关闭的情况下,您将得到LazyInitializationException或null(如果您使用某些库来清理put hibenrate代理,如Gilead),则会得到后者)

失败的代码(抛出异常)就是我设置断点的地方,所以显然会话仍然有效,对吗?不同的是,如果我跨过下一行,它就会爆炸,但是如果我用Eclipse检查,然后跨过下一行,它就会工作。我认为当Eclipse调试器访问文件时也会发生错误,这是因为Eclipse只是在继续。当您不使用eclipse进行调试/升级时,您得到的确切错误是什么?很好,没有想到这一点。。。我将把异常附加到最初的问题上。正如您所提到的,Eclipse捕获了异常,所以我现在做了与解决方法相同的事情(捕获异常、检查异常、重试)。听着,这不是一个令人不快的问题,但有时候Hibernate只会有一些bug以意外异常的形式出现。尝试在hibernate jira上查找您的异常:
java.lang.NullPointerException
    at org.hibernate.envers.query.impl.EntitiesAtRevisionQuery.list(EntitiesAtRevisionQuery.java:72)
    at org.hibernate.envers.query.impl.AbstractAuditQuery.getSingleResult(AbstractAuditQuery.java:104)
    at org.hibernate.envers.entities.mapper.relation.OneToOneNotOwningMapper.mapToEntityFromMap(OneToOneNotOwningMapper.java:74)
    at org.hibernate.envers.entities.mapper.MultiPropertyMapper.mapToEntityFromMap(MultiPropertyMapper.java:118)
    at org.hibernate.envers.entities.EntityInstantiator.createInstanceFromVersionsEntity(EntityInstantiator.java:93)
    at org.hibernate.envers.entities.mapper.relation.component.MiddleRelatedComponentMapper.mapToObjectFromFullMap(MiddleRelatedComponentMapper.java:44)
    at org.hibernate.envers.entities.mapper.relation.lazy.initializor.ListCollectionInitializor.addToCollection(ListCollectionInitializor.java:67)
    at org.hibernate.envers.entities.mapper.relation.lazy.initializor.ListCollectionInitializor.addToCollection(ListCollectionInitializor.java:39)
    at org.hibernate.envers.entities.mapper.relation.lazy.initializor.AbstractCollectionInitializor.initialize(AbstractCollectionInitializor.java:67)
    at org.hibernate.envers.entities.mapper.relation.lazy.proxy.CollectionProxy.checkInit(CollectionProxy.java:50)
    at org.hibernate.envers.entities.mapper.relation.lazy.proxy.CollectionProxy.size(CollectionProxy.java:55)
    at <MY CODE HERE, which checks list.size()>
boolean worked = false;
while (!worked) {
    try {
        if(list.size() == 1) {
            // do stuff 
        }
        worked = true;
    } catch (Exception e) {
        // TODO: exception must be accessed or the loop will be infinite
        e.getStackTrace();
    }
}