我有一个导致一些悲伤的org.hibernate.envers.entities.mapper.relation.lazy.proxy.ListProxy
实例:每当我以编程方式尝试访问它时,我得到一个空指针异常(即调用list.size()
),但是当我第一次检查使用Eclipse的变量检查器的对象我看到Hibernate生成一条SQL语句并且列表动态地改变。然后一切正常。我怎样才能以编程方式做同样的事情?我试过list.toString()
但这似乎没有帮助。eclipse在检查变量时做什么(调试时)
更新1
不知道如果这有助于但是当我第一次点击列表实例我在显示屏看到:
com.sun.jdi.InvocationException occurred invoking method.
然后数据库查询运行,当我再次点击我得到正确的.toString()
结果。
更新2
原来这里是例外,我得到(当我不检查调试模式下的元素)。
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();
}
}
失败的代码(抛出异常)是正确的,我有我的断点设置,所以显然会话仍然有效吗?不同之处在于,如果我跨越下一行,它会爆炸,但是如果我使用Eclipse进行检查,那么可以跨越下一行。 –
我认为当eclipse调试器访问文件时也会出现这个错误,这就是它只是由Eclipse继承而来。当你不使用eclipse进行调试/切换时,你得到的确切错误是什么? –
好点,没有想到......我会附加例外原始问题。 –