2013-10-02 9 views
5

Czy jest możliwe uzyskanie liczby wyników agregacji przy użyciu przetwarzania grupowego w QueryDSL? Mam następujące zapytanie:Zliczanie w transformatorze grupującym 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' 
           ))); 

i chcę uzyskać liczbę osób należących do określonego katalogu.

Dzięki

Odpowiedz

5

Jeśli nie potrzeba żadnej z rejestrów podrzędnych następnie wyrazić zapytanie bez grupy przez transformację tak (tylko szkicując)

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

Grupa przez transformację jest przydatna, gdy trzeba agregować pojedyncze wiersze wyników.

+3

Dzięki Timo. To tylko mała sugestia. Byłoby miło, gdyby ktoś mógł opracować "receptury QueryDSL" na przykłady z życia wzięte, które nie są wymienione w dokumentacji, jak ta. – Nedo

+0

Dobry pomysł. Jaki tytuł przepisu sugerujesz dla tego przykładu? Projections.constructor i count() sprawiają, że jest to trochę wyjątkowe, reszta to całkiem zwyczajne użycie SQL Querydsl. –

+0

Coś w rodzaju "Aggregating dzieci liczy się w jednostkę nadrzędną" lub "Agregacja liczy się w encji root" ... =) Spróbuję ponownie przywołać niektóre niezwykłe konstrukcje QueryDSL stąd na stackoverflow. – Nedo