2013-04-30 75 views
0

簡單的問題,但我沒有看到我的推理錯誤。具有選定成員作爲結果而不是整個行/實體的命名查詢。JPA:結果列表 - 鑄造對象[]元組

現在我想用方便的元組方法訪問成員字段。

q = em.createNamedQuery("test.findvar"); 
List<Tuple> tuples = q.getResultList();  
for (Tuple t : tuples) 
    System.out.println(t.get(0) + " " + t.get(1)); 

不幸的是它引發了我:

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to javax.persistence.Tuple 

所有工作正常:

q = em.createNamedQuery("test.findvar"); 
List<Object[]> objs = q.getResultList();  
for (Object[] obj : objs) 
    System.out.println(obj[0] + " " + obj[1]); 

這有什麼錯我的第一個解決方案嗎?

+0

你確定'q.getResultList();'正在返回'List '我從第二個解決方案看到的是它返回對象數組列表,而不是元組 – asifsid88 2013-04-30 09:54:25

回答

1

您可以指定createNamedQuery(返回類型),爲javadoc

注意所以你的代碼應該是這樣的:

q = em.createNamedQuery("test.findvar", Tuple.class); 
List<Tuple> tuples = q.getResultList();  
for (Tuple t : tuples) 
    System.out.println(t.get(0) + " " + t.get(1)); 

當你指定返回類型,則創建的,而不是QueryTypedQuery實例實例。查詢不使用泛型,只返回java.util.List。

+0

就是這樣。非常感謝! – 2013-04-30 11:27:55

+0

讓我糾正,它沒有如預期的那樣:列表 tuples = em.createNamedQuery(「getInfo」,Tuple.class).setParameter(「param」,1).getResultList();後跟tuples.get(0).getClass()給我一個「ClassCastException」 - 「對象不能轉換爲javax.persistence.Tuple」 – 2013-05-02 12:00:15