2013-10-02 7 views
5

Ist es möglich, die Anzahl der aggregierenden Ergebnisse zu erhalten, wenn GroupBy Verarbeitung in QueryDSL verwendet? Ich habe folgende Abfrage:Count in QueryDSL Gruppierung Transformator

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

und ich möchte die Anzahl der Personen zu dem bestimmten Katalog zu erhalten. durch Transformation wie folgt

Dank

Antwort

5

Wenn Sie eine der untergeordneten Datensätze nicht brauchen dann ohne Gruppe die Abfrage ausdrücken (nur skizzieren)

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

Die Gruppe, die durch Transformation ist nützlich, wenn Sie brauchen um einzelne Ergebniszeilen zu aggregieren.

+3

Danke Timo. Nur ein kleiner Vorschlag. Es wäre schön, wenn jemand "QueryDSL-Rezepte" für einige Beispiele aus dem wirklichen Leben ausarbeiten könnte, die in der Dokumentation nicht erwähnt werden, wie diese. – Nedo

+0

Gute Idee. Welchen Rezepttitel würden Sie für dieses Beispiel vorschlagen? Projections.constructor und count() machen dies zu etwas Besonderem, der Rest ist recht gewöhnliche SQL-Verwendung von Querydsl. –

+0

So etwas wie "Aggregieren von Kindern zählt in Parent-Entity" oder "Aggregation zählt in Root-Entity" ... =) Ich werde versuchen, einige ungewöhnliche QueryDSL-Konstruktionen von hier auf Stackoverflow wieder zu vereinigen. – Nedo