2015-09-18 15 views
1

你好,這代碼只給我1列,因爲的GroupBy的背面:選擇從表中的所有行,但保持條件的完整

@Override 
    public Map<Integer, List<Cluster>> getPartnerIdClusterMap(boolean minorOnly, boolean foreignCountriesOnly) { 
     BooleanBuilder predicate = new BooleanBuilder(); 
     if (minorOnly) { 
      predicate.and(qCluster.type.eq(ClusterType.MINOR)); 
     } 
     if (foreignCountriesOnly) { 
      predicate.and(qPartner.country.code2.ne("nl")); 
     } 

     return from(qCluster) 
       .innerJoin(qCluster.partner, qPartner) 
       .where(predicate) 
       .where(qPartner.country.code2.ne("nl")) 
       .map(qPartner.id, GroupBy.list(qCluster)); 

    } 

這是我很高興地想知道:

我想選擇Cluster表的所有行。但我想保持這些條件(innerJoin,where子句等)完好無損。

所以我試過這樣:

return (Map<Integer, List<Cluster>>) from(qCluster) 
      .innerJoin(qCluster.partner, qPartner) 
      .where(predicate) 
      .where(qPartner.country.code2.ne("nl")); 

待澆鑄,我從JPQLQuery上面的代碼爲地圖類型誠實Netbeans的。但不幸的是,代碼不起作用。因爲我得到以下錯誤:

HTTP Status 500 - Request processing failed; nested exception is java.lang.ClassCastException: com.mysema.query.jpa.impl.JPAQuery cannot be cast to java.util.Map 

這裏是錯誤的截圖:

screenshot

有人可以幫也許我,好嗎?

+0

如果您刪除地圖,它可能不會返回地圖。將其分配給Object類型,然後調試什麼是實際類型,然後將方法簽名更改爲該類型。 –

+0

好吧我現在已經鑄造它到一個對象類型的鏈接:http://pastebin.com/rJpJuwys 但是,然後我得到在Netbeans的語法錯誤:對象不能轉換爲地圖 – superkytoz

+0

你通常必須轉換將結果手動查詢到地圖。順便說一句,我不是標準專家,但你似乎並沒有真正執行查詢。 – Thomas

回答

0

這應該爲你工作,如果你讓兩個合作伙伴和羣集有一個一對多或多對一一對多的關係:

return from(qCluster) 
      .innerJoin(qCluster.partner, qPartner) 
      .where(predicate) 
      .where(qPartner.country.code2.ne("nl")) 
      .map(qPartner.id, qPartner.clusters); 

我相信你有一個List<Cluster>Partner(財產名字就像上面的集羣一樣)。否則,您的要求將無效。

相關問題