我有一個導致一些悲傷的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進行調試/切換時,你得到的確切錯誤是什麼? –
好點,沒有想到......我會附加例外原始問題。 –