2016-03-25 9 views
2

Ich versuche, die folgende Abfrage mit Kriterien zu generieren:Hibernate Kriterien Gruppe Abfrage ist falsch

select order_number, order_date, sum(order_amount) 
from st_pur_orders 
group by ORDER_NUMBER,ORDER_DATE; 

Hier meine Kriterien:

Criteria cr = session.createCriteria(StPurOrders.class); 
      cr.setProjection(Projections.projectionList() 
        .add(Projections.property("orderNumber"), "orderDate") 
        .add(Projections.sum("orderAmount")) 
        .add(Projections.groupProperty("orderNumber")) 
        .add(Projections.groupProperty("orderDate"))); 
      cr.setResultTransformer(Transformers.aliasToBean(PurOrderColl.class)); 
      list = cr.list(); 

Aber die Abfrage im Hintergrund immer erzeugen, ist dies:

select this_.ORDER_NUMBER as y0_, sum(this_.ORDER_AMOUNT) as y1_, 
    this_.ORDER_NUMBER as y2_, this_.ORDER_DATE as y3_ 
from STOCK.ST_PUR_ORDERS this_ 
group by this_.ORDER_NUMBER, this_.ORDER_DATE; 

Meine Frage ist, warum die ORDER_NUMBER Feld zweimal aufgeführt werden?

+0

Erhalten Sie eine korrekte Ergebnismenge oder sind in Ihren Ergebnissen tatsächlich doppelte Daten vorhanden? –

+0

Es gibt tatsächlich doppelte Daten in meinen Ergebnissen und daher kann ich die PurOrderColl-Klasse nicht zuordnen, da ich dort nur drei Eigenschaften habe. – ErrorNotFoundException

+0

@ErrorNotFoundException Ihre Kriterien haben bereits 'Projections.groupProperty (" orderNumber ")'. Ich sehe keine Notwendigkeit für 'Projections.property (" orderNumber "),'. Kannst du das bitte entfernen und versuchen. –

Antwort

2

Meine Frage ist, warum das Feld ORDER_NUMBER zweimal aufgeführt ist?

Ihre Kriterien haben bereits Projections.groupProperty("orderNumber"). Die generierte Abfrage enthält also orderNumber in ihrer SELECT-Klausel.

Ich sehe keine Notwendigkeit, Projections.property("orderNumber") explizit anzugeben. Kannst du das bitte entfernen und versuchen.

Gleiches gilt für jedes andere Feld, das mit groupProperty(..) angegeben wird.

+0

Sieht so aus, als müsste ich tatsächlich die ganze Zeile '.add (Projections.property (" orderNumber ")," orderDate ") entfernen' 'und es hat funktioniert. – ErrorNotFoundException

+1

@ErrorNotFoundException Das ist wahr. Sobald wir include specify 'groupProperty (...)' angeben, wird es automatisch in die select-Klausel eingeschlossen. Die Antwort wurde aktualisiert, um sie widerzuspiegeln. –

+0

Vielen Dank für diese Einsicht. – ErrorNotFoundException