2011-04-13 90 views
1

我已經基於我在數據庫上設置的視圖創建了一個Java實體(在Eclipse中)。實體的設置在我的glassfish服務器上進行測試,同時也通過我運行的flex應用程序引用其中部署的webservice中的方法和類。JPQL查看返回的重複項

唯一的問題是行數是正確的,但返回的值都是重複的!我無法理解爲什麼會發生這種情況,並且在網絡上引用視圖時幾乎找不到任何東西,除了它應該和表格一樣工作...它的確如此,但它會返回重複的內容!

作爲一個測試,我創建了一個包含所有相同列/數據等的表作爲視圖,並指出了JPA實體 - 沒有重複!

任何人都知道我在這裏做錯了嗎?

這是代碼!

EntityManager em = null; 
BigDecimal pId = new BigDecimal(conId); 


try { 
em = emf.createEntityManager(); 
String applicationQueryString = "select c from VDisc c where c.dCorId = :conId"; 

Query contdetQuery = em.createQuery(applicationQueryString); 
contdetQuery.setParameter("conId",pId); 

List list = contdetQuery.getResultList(); 
VDisciplines[] disc = new VDisciplines[list.size()]; 
disc = (VDisciplines[]) list.toArray(disc); 

return disc; 

回答

2

你是如何將你的實體映射到視圖的,你是如何定義爲Id的?另外你如何定義/執行查詢?

如果你定義了一些非唯一的字段作爲Id,那麼你會得到同一個Id的重複對象。

您可以嘗試對原始數據使用原生SQL查詢以確保從數據庫正確返回它。

+0

詹姆斯 - 謝謝你回到我的隊友。我認爲這可能是與id的事情...我必須刪除@ Id註釋,因爲每次我跑我的查詢「VDVD c選擇c c.dCorId =:conId」它一直說它不知道什麼「ID」字段在選擇查詢中,如「SELECT ID,CON_ID ...」中所示。我認爲這是與此有關嗎?問題是,因爲它是一個視圖,所以視圖中沒有唯一標識符,只是混合在一起的ID和名稱混合在一起! – 2011-04-13 13:57:39

+0

我在第一篇文章中添加了我的代碼。非常感謝! – 2011-04-13 14:46:14

+0

包括你的VDisc類,它仍然必須有@Id,否則你會得到一個錯誤。如果視圖中確實沒有唯一的一組字段,則使用@Id標記所有屬性。 – James 2011-04-14 14:07:39