2013-07-17 110 views
0

我不明白爲什麼我在代碼的最後一行
我想如果我有OrgStructure列表parametrised了ClassCastException異常 - 不會有問題怪異的類轉換異常

List<MqtAsutrOrgst2> OrgStructure = null; 
    Query query = null; 
    ... 
      ... 

    OrgStructure = query.getResultList();  
    for (Object o : OrgStructure) { 

     MqtAsutrOrgst2 orgStructureItem = (MqtAsutrOrgst2) o; 

    } 

附: MqtAsutrOrgst2只是一個@Entity

+3

如何'MqtAsutrOrgst2'有關'OrgStructureItemType'? – NINCOMPOOP

+1

你甚至沒有向我們展示OrgStructure的*聲明,更不用說查詢是做什麼的。 'orgstructItems'被參數化的事實根本不會改變'OrgStructure'的內容... –

+0

對於(MqtAsutrOrgst2 o:OrgStructure)''做同樣的事情嗎? – Leeward

回答

0

所以最後的問題是由缺少它被定位於MqtAsutrOrgst2
類感謝名單在物化查詢表中的一個字段造成的一切

1

只是嘗試登錄該對象的類型,一切都應該清楚

+0

即時通訊嘗試登錄,即使我做'OrgStructure =(List )query.getResultList() ;'我有'OrgStructure.getClass():類org.apache.openjpa.kernel.DelegatingResultList' wtf? – Sergey

+0

嘗試記錄循環內o對象的類 –

2

我不明白爲什麼我在代碼的最後一行有ClassCastException異常

我的理解是MqtAsutrOrgst2OrgStructureItemType類的子類或實現類型。 List orgstructItems被定義爲保留OrgStructureItemType的子類型的任何東西,其中包括MqtAsutrOrgst2以及可能的一些其他子類以及不能在彼此之間被鑄造。

MqtAsutrOrgst2 orgStructureItem = (MqtAsutrOrgst2) o; 

您正在迫使編譯器認爲,在運行時的對象o將是MqtAsutrOrgst2一個對象,但實際上它是一些其他子類的OrgStructureItemType不能轉換爲MqtAsutrOrgst2的對象。

有更好的方法來做到這一點,但你可以做一個臨時的解決辦法:

if(o instanceof MqtAsutrOrgst2)  
    MqtAsutrOrgst2 orgStructureItem = (MqtAsutrOrgst2) o; 

下面的代碼將是一個快速失敗:

for (MqtAsutrOrgst2 o : OrgStructure) { ... } 
+0

似乎MqtAsutrOrgst2是OrgStructure的子類,而不是OrgStructureItemType。 – artplastika

+0

@artplastika可能是,但似乎不清楚query.getResultList()返回的是:( – NINCOMPOOP

+0

OrgStructure.getClass():class org.apache.openjpa.kernel.DelegatingResultList and forget about OrgStructureItemType – Sergey

0

我想這MqtAsutrOrgst2是子類的OrgStructure。似乎你使用JPA獲得OrgStructure的列表。我們需要更多關於您使用的Query對象的信息。但很可能你使用Query來構造超類OrgStructure的完全對象。

+0

query.getResultList()返回org.apache.openjpa.kernel.DelegatingResultList – Sergey

+0

對!查詢構造了超類OrgStructure的確切對象,但爲什麼它變成了DelegatingResultList。我能做些什麼?有任何想法嗎? – Sergey

+0

> OrgStructure但爲什麼它變成DelegatingResultList - 這是確定的,因爲你從getResultList分配給它()。請將代碼顯示在創建Query對象的位置,並將所有註解應用於該類的MqtAsutrOrgst2類的聲明。 – artplastika