2011-10-14 12 views
5

3 saatlik googling ve API aramasına rağmen, veritabanı işlevlerini hazırda bekleme ölçütü sorgusunda kullanmanın mümkün olup olmadığı konusunda herhangi bir başvuru bulamıyorum. Spesifik olması için:Hazırda bekletme ölçütlerindeki sütunları dönüştürmek için veritabanı işlevlerini kullanma

Bir tarih aralığı veritabanında tarih saatinin tarih bölümüne erişmek ve buna göre gruplamak istiyorum. Ben sorgu gibi bir şey olacağını hayal ediyorum:

session.createCriteria(Exam.class) 
    .setProjection(Projections.projectionList() 
    .add(Projections.property("DATE(beginExam)").as("beginDate")) 
    .add(Projections.groupProperty("beginDate"))) 
    .list(); 

Bu bana "özelliği çözemedi: Tarih (beginExam) ..." vererek çalışmıyor istisna. Bunun yapılması çok basit bir şey gibi görünüyor ve bir şeyleri kaçırmam gerekiyor. Aynı zamanda dinamik olarak da kısıtlamalar yapıyorum (örnekte bunu dışarıda bıraktım) kriterler bunun için kullanacağınız hazırda bekleme bileşenidir, ancak bu noktada herhangi bir öneriye açıklık getiriyorum. kendi grubumu kurarak.

Teşekkür

cevap

1

Projections.sqlProjection bir göz atın ve

+0

yaptım,:

session.createCriteria(Exam.class) .setProjection(Projections.projectionList() .add(Projections.sqlProjection("date({alias}.beginExam) as beginDate", new String[] { "beginDate" }, new Type[] { StandardBasicTypes.DATE })) .add(Projections.groupProperty("beginDate"))) .list(); 

veya SQLGroupProjection ile. Eşitlik için birçok yöntem arasında ve aradaki sütunun değerini bir tarihe dönüştürecek bir yöntem yoktur, bu nedenle karşılaştırılabilir veya bir groupProperty'ye yerleştirilebilir. – user996088

+0

@ user996088: beginExam'in veri türü nedir? Projections.sqlProjection'da _any_ SQL'i kullanabilirsiniz, bu yüzden neden bir tarihe dönüştürememeniz gerektiğini anlamıyorum. – tscho

+0

Arızam. Benim açımdan, gkamal'ın yanlış yönde doğru yönde beni işaret ettiğini fark etmedim. – user996088

8

Porjections.sqlGroupProjection bu

session.createCriteria(Exam.class) 
    .setProjection(Projections.sqlGroupProjection("date(beginExam) as beginDate", "beginDate", new String[] { "beginDate" }, new Type[] { StandardBasicTypes.DATE })) 
.list(); 

hazırda geni gibi bu

session.createCriteria(Exam.class) 
    .setProjection(Projections.projectionList() 
    .add(Projections.sqlProjection("date(beginExam) as beginDate", new String[] { "beginDate" }, new Type[] { StandardBasicTypes.DATE })) 
    .add(Projections.groupProperty("beginDate"))) 
.list(); 

veya Projections.sqlGroupProjection gibi Projections.sqlProjection denediniz SQL sorguları oranları tablo takma adlar, bu işi yapmak için SQL parçasına {alias} parçasını eklemek gerekebilir böylece: iyice

session.createCriteria(Exam.class) 
    .setProjection(Projections.sqlGroupProjection("date({alias}.beginExam) as beginDate", "beginDate", new String[] { "beginDate" }, new Type[] { StandardBasicTypes.DATE })) 
.list(); 
+0

Ah! Harika, çok teşekkür ederim. Bununla çalışacağım. – user996088

+0

@ user996088: "{alias}" fragmanıyla ilgili düzenlememe dikkat et, önerilen çözümüm işe yaradı mı? Ben merak ediyorum çünkü aslında sorgulardan birini yürütmedim, ben sadece onları yazdım (bu yüzden yazım hataları da olabilir) – tscho

+0

Teşekkürler Tscho, son örneğiniz benim için çalıştı Projections.sqlGroupProjection ... –

İlgili konular