2012-12-21 17 views
10

"Group by" kullanarak bir ölçüt sorgusu yazmak istiyorum ve tüm sütunları döndürmek istiyorum."Tüm sütunları" ile hazırda bekleme kriteri sorgularında "group by" ile seçin

Düzlem sql şu şekildedir:

select * from Tab group by client_name order by creation_time; 

Ben satır count(distinct client_name) numarası olacaktır anlıyoruz. aşağıdaki şekilde doğru bir sonuç vermek görünmüyor

Benim şu anki sorgu: Bu sorgu sadece "client_name" döndürür

Criteria criteria = getSession(requestType).createCriteria(Tab.class); 
     criteria.setProjection(Projections.projectionList().add(Projections.groupProperty("client_name"))); 
     criteria.addOrder(Order.asc("creationTime")); 

. Tüm sütun adlarını elle koymak istemiyorum. Bir şekilde olmalı, ne yapılabilir?

+0

Bu bağlantıya bir bakın: http://stackoverflow.com/questions/6678216/hibernate-select-all-projections-group-by – maximilianus

cevap

1

Sanırım bir şeyleri yanlış anlıyorsunuz. SQL'de GROUP BY ise, seçili tüm sütunlara göre gruplandırmanız gerekir. Aynı durum Hazırda bekletme için de geçerlidir -Projection numaralı telefondan geliyorsanız, bu sütunun bir grup sütunu olduğunu Hazırda yazmanız gerekir. Başka sütun/alanlara başvurulmazsa, Hazırda Beklet, gruplandırılmaları gerektiğinden, bunları istemediğinizi varsayar.

Bir adım geri atmak için: ne yapmaya çalışıyorsunuz? Bir tabloda tüm sütunları arasında yinelenen verileriniz varsa, verileriniz kötü olabilir veya verilere yanlış şekilde girebilirsiniz. En azından, anahtarın berbat olurdu.

0

Projeksiyonlar için hazırda beklemede, tüm sütunların projeksiyon listesine eklenmesi gerekir. Sonucu elde etmek için setResultTransformer kullanmalıyız. hazırda içinde tarafından grubunu almak için, örneğin altında edin: hazırda bekleme projeksiyon kullanırken

ProjectionList projectionList = Projections.projectionList(); 
    projectionList.add(Projections.groupProperty("column1")); 
    projectionList.add(Projections.property("column2")); 
    projectionList.add(Projections.property("column3")); 
    criteria.setProjection(projectionList); 
    criteria.setResultTransformer(Transformers.aliasToBean(Table.class)); 
0

projeksiyon listesinde gerekli olan tüm sütunları eklemek gerekir. Yalnızca Projections.projectionList() öğesini eklediniz. (Projections.groupProperty ("client_name"))

. Bu yüzden sadece client_name döndüren açıktır.