2012-02-27 50 views
0

我做一個查詢返回的自定義類的代替對象:休眠左聯接返回對象

Query q = em.createQuery("FROM Author a LEFT JOIN a.documents d LEFT JOIN d.personDocuments pd WHERE pd.person = :person ORDER BY a.lastName"); 
q.setParameter("person", person); 
return new HashSet<Author>(q.getResultList()); 

我預計q.getResultList()將返回作者的名單(及其鏈接文件),但它是一個對象列表。我究竟做錯了什麼?

回答

3

方法getResultList() from Query未輸入。
因此,它似乎只會返回Objects(您的情況的確是Author的實例),您手動將其轉換爲Author。 (例如,您可以通過檢查getClass()來查看Object的真實情況。)

您可以使用TypedQuery進行類型化查詢,該類型查詢將根據需要使用。

TypedQuery<Author> q = em.createQuery("SELECT a FROM Author a LEFT JOIN a.documents d LEFT JOIN d.personDocuments pd WHERE pd.person = :person ORDER BY a.lastName", Author.class); 
q.setParameter("person", person); 
return new HashSet<Author>(q.getResultList()); 

這個來自objectdb的Tutorial覆蓋得很好。

+0

我認爲「它會返回對象」是誤導。它正在返回作者,但沒有訪問它們的類型變量,也沒有方法簽名保證這樣做。 – 2012-02-27 14:42:52

+0

@這就是我的意思:D我會嘗試重新表述並使之更清晰。 – oers 2012-02-27 14:44:24

+0

感謝您的回覆,但仍然還沒有完成:\t \t'TypedQuery q = em.createQuery(「FROM Author a LEFT JOIN a.documents d LEFT JOIN d.personDocuments pd WHERE pd.person =:person ORDER BY a .lastName「,Author.class);'給我︰'不能創建TypedQuery查詢與多個返回使用請求的結果類型' – user485659 2012-02-27 14:49:59