2013-10-02 46 views
5

在QueryDSL中使用groupby處理時,可以獲得聚合結果的計數嗎?我有以下查詢:在QueryDSL分組轉換器中計數

query.from(catalog) 
.innerJoin(qe).on(catalog.id.eq(qe.itemId)) 
.innerJoin(enterprise).on(enterprise.id.eq(qe.enterpriseId)) 

.leftJoin(catalogPerson).on(catalogPerson.catalogId.eq(catalog.id)) 

.where(catalog.deletionDate.isNull(), qe.enterpriseId.eq(org)) 

.orderBy(catalog.creationDate.desc()) 

.limit(limit) 
.offset(offset) 

.transform(groupBy(catalog.id).as(Projections.constructor(Catalog.class, 
           catalog.id, 
           catalog.name, 
           catalog.code, 
           // //GET THE NUMBER OF CATALOG PERSONS' 
           ))); 

我想獲得屬於某個目錄的人數。

感謝

回答

5

如果你不需要任何的子記錄然後通過這樣的轉換(僅素描)表示不組查詢

query.from(catalog) 
.innerJoin(qe).on(catalog.id.eq(qe.itemId)) 
.innerJoin(enterprise).on(enterprise.id.eq(qe.enterpriseId)) 
.leftJoin(catalogPerson).on(catalogPerson.catalogId.eq(catalog.id)) 
.where(catalog.deletionDate.isNull(), qe.enterpriseId.eq(org)) 
.orderBy(catalog.creationDate.desc()) 
.limit(limit) 
.offset(offset) 
.groupBy(catalog.id) 
.list(Projections.constructor(Catalog.class, 
          catalog.id, 
          catalog.name, 
          catalog.code, 
          catalogPerson.count())); 

,如果你需要通過改造該集團是有用來聚合各個結果行。

+3

感謝蒂莫。只是一個小建議。如果有人能夠爲一些真實生活中的例子詳細說明「QueryDSL食譜」,這將是很好的,這些例子在文檔中沒有提到,比如這個。 – Nedo

+0

好主意。你會爲這個例子提供什麼配方標題? Projections.constructor和count()使這個有點特別,其餘部分是相當普通的Querydsl SQL用法。 –

+0

類似於「聚合子項計數到父實體」或「聚合計數到根實體」... =)我會嘗試從這裏在stackoverflow recopilate一些不常見的QueryDSL結構。 – Nedo