2012-04-13 33 views
0

每當我嘗試從一個jpa調用中退出的實體列表中取出實體數組時,我都會收到一個轉換異常。例如...將對象數組轉換爲JPA實體數組?

QuickLaunch[] qLaunchArr = null; 
List<QuickLaunch> listQL = null; 
try 
{ 
    System.out.println("testing 1..2..3"); 

    //qLaunchArr 
    listQL = emf.createNamedQuery("getQuickLaunch").getResultList(); 
    Object[] objArr = listQL.toArray(); 
    //System.out.println(listQL.size()); 
    qLaunchArr = (QuickLaunch[]) listQL.toArray();  
} 
catch (Exception e) 
{ 
    System.out.println("Bull Hockey!!!! I can't believe it's not butter!: "+e.toString()); 
} 

[Ljava.lang.Object; incompatible with [Lcom.upmc.esdm.messaging.entities.QuickLaunch; 

那是在我的服務器日誌...(我用WID) ,我也得到這個例外...

commonj.connector.runtime.DataHandlerException: CWLAP0507E: The response bean class for java class method GetAllQuickLaunchComponents cannot be created. Reason java.lang.IllegalArgumentException: argument type mismatch. 
+0

你得到一個classCastException,但不打擾引用實際的異常和消息?尼斯。 – DataNucleus 2012-04-13 12:28:47

+0

嗯,我有點希望這是一種常見的事情......但我會根據您的要求發佈例外情況。 – SoftwareSavant 2012-04-13 12:43:26

回答

1

你可以嘗試TypedQuery獲得沒有明確鑄造的實體清單&防止異常。

TypedQuery<QuickLaunch> listQL = em.createNamedQuery("QuickLaunch.getQuickLaunch", QuickLaunch.class); 

List<QuickLaunch> products = listQL .getResultList(); 

此外,更改了查詢名稱以更有意義的方式標識其類或結果類型。

+0

不好。我正在接受另一個例外。 BTW。我正在嘗試將List SoftwareSavant 2012-04-13 13:00:28

+0

@DmainEvent是否有任何特定的原因,你正在轉換列表數組。 – 2012-04-13 13:04:41

+0

這將是不正確的,我從列表轉換爲數組。它永遠不會作爲一個數組出現。我希望它。我在那裏的一些代碼是我試圖儘可能地從這個查詢中獲得一系列結果的結果。 – SoftwareSavant 2012-04-13 13:06:27

1

好吧......我想我找到了答案。它是由這個帖子的啓發......

https://stackoverflow.com/a/8060077/729820

我基本上做到這一點

try 
    { 
     System.out.println("testing 1..2..3"); 
     listQL = emf.createNamedQuery("getQuickLaunch").getResultList(); 
     System.out.println("What is the size of this list: number "+listQL.size()); 
     qLaunchArr = listQL.toArray(new QuickLaunch[listQL.size()]);   
    } 

所有異常似乎明確的權利了。 感謝您的幫助球員。

1

這不是JPA而是Java,因爲它不會將Object []轉換爲QuickLaunch []。你不能使用Object數組而不是QuickLaunch []數組嗎?