2013-10-02 7 views
5

È possibile ottenere il conteggio dei risultati di aggregazione quando si utilizza l'elaborazione groupby in QueryDSL? Ho la seguente domanda:Contare nel trasformatore di raggruppamento 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' 
           ))); 

e voglio ottenere il conteggio delle persone appartenenti al catalogo specifico.

Grazie

risposta

5

Se non hai bisogno di nessuno dei record figlio poi esprimere la query senza per trasformazione come questo (solo abbozzare)

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())); 

Il gruppo da trasformazione è utile se avete bisogno per aggregare le singole righe dei risultati.

+3

Grazie Timo. Solo un piccolo suggerimento. Sarebbe bello se qualcuno potesse elaborare "ricette QueryDSL" per alcuni esempi di vita reale, che non sono menzionati nella documentazione, come questa. – Nedo

+0

Buona idea. Quale titolo suggeriresti per questo esempio? Projections.constructor e count() lo rendono un po 'speciale, il resto è abbastanza comune nell'utilizzo SQL di Querydsl. –

+0

Qualcosa come "Aggregare i conteggi dei bambini nell'entità padre" o "Conteggi aggregati nell'entità radice" ... =) Proverò a ricopilare alcune costruzioni QueryDSL non comuni da qui su StackOverflow. – Nedo