Forum İçeriği > Persistence API's > Hibernate Left Join Subqueries

Hasan Bas 21 ay önce
Aktivite Puanı: 10
Merhaba arkadaslar, Grails Framework ile bir web uygulamasi gelistiriyorum. Veri tabaninda bir tane Assessment isimli tablom var. Bu tablo da topicID ve relevanz isimli sütunlarim var(Daha baska sutunlar da var ama burada önemi yok). Programimda secilen herhangi bir konu(topicID) kullanici tarafindan önemli(1) veya önemli degil(0) olarak degerlendiriliyor. Benim yapmak istedigim ise view tarafinda hangi konu(topicID) ,kac defa, 1 olarak mi, 0 olarak mi degerlerndirilmis bunu istatistik olarak göstermek istiyorum. Bunun icin cok basit olarak de asagidaki sorgulari yapiyorum. List topicIDs = Assessment.executeQuery("Select Distinct topicID From Assessment ORDER BY topicID ASC"); List tumDegerlerinSayisi = Assessment.executeQuery("SELECT count( * ) FROM Assessment GROUP BY topicID"); List birDegerlerininSayisi = Assessment.executeQuery("SELECT count( * ) FROM Assessment WHERE relevanz = '1' GROUP BY topicID"); List sifirDegerlerininSayisi = Assessment.executeQuery("SELECT count( * ) FROM Assessment WHERE relevanz = '0' GROUP BY topicID"); Bunlari view'de su sekilde görünüyor. TopicID Toplam Önemli Önemli-Degil 083 45 23 22 243 34 22 11 324 12 4 8 Problemim tam da burda basliyor. Henüz herhangi bir konu(topicID) hic 1 olarak veya 0 olarak degerlendirilmemisse, o satir bos kaliyor, yani view de göstermek istedigim zaman ben bosluk yerine 0 görmek istiyorum. Cünkü Sql'de count group by ile birlikte row sayisini sayiyor. Bu sorunu asmak icinde söyle bir cözüm buldum. SELECT IF(B.Cnt IS NULL,0,B.Cnt) FROM ( SELECT DISTINCT topicID FROM Assessment ) A LEFT JOIN ( SELECT topicID, COUNT(*) AS Cnt FROM Assessment WHERE relevanz IS NOT NULL (and /relevanz = '0' / relevanz = '1') GROUP BY topicID ) B ON A.topicID = B.topicID bu sorgu ile tam istedigime ulasabiliyorum. Bosluk olan yerler sifirlaniyor. Burada bir sorun karsima cikiyor.grails framework'ta hibernate bunu desteklemiyor. Yani su sekilde sorgu yaptigim zaman hata aliyorum. List tumDegerlerinSayisi = Assessment.executeQuery("SELECT IF(B.Cnt IS NULL,0,B.Cnt) FROM ( SELECT DISTINCT topicID FROM Assessment ) A LEFT JOIN ( SELECT topicID, COUNT(*) AS Cnt FROM Assessment WHERE relevanz IS NOT NULL GROUP BY topicID ) B ON A.topicID = B.topicID"); Kisacasi grails framework ile calismamis olabilirsiniz. Ama saniyorum Hibernate tüm Java tabanli Frameworklarda aynidir. Bu sekildeki bir sorguyu hibernate ile nasil calistirabilirim. Bi fikri olan var mi? Ayrica JDBC baglantisiyla da yapmaya calistim. Yine hata aldim. Kac gündür ugrasiyorum. Biraz uzun oldu ama herhangi bir bilgisi olan varsa ve paylasirsa cok memnun ve mütesekkir olurum. Yardimlarinizi bekliyorum simdiden cok tesekkür ediyorum.
Altuğ Bilgin Altıntaş 21 ay önce
Aktivite Puanı: 144
Merhaba; SQL sorgusunu native bir şekilde çalıştırmayı denedin mi ? executeQuery yerine createSQLQuery kullanımı. Native sql çalıştırmanın detayları : http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querysql.html Kolay gelsin. Altuğ.

Latest Activity

yeni bir mesaj yolladı. TopLink EclipseLink
5 ay önce
mesaja yanıt verdi RE: HttpClient.
6 ay önce
mesaja yanıt verdi RE: HttpClient.
7 ay önce
yeni bir mesaj yolladı. HttpClient
7 ay önce
yeni bir mesaj yolladı. HttpClient
7 ay önce
yeni bir mesaj yolladı. Birt ile Raporlarma
10 ay önce
mesaja yanıt verdi RE: Hibernate.
10 ay önce
mesaja yanıt verdi RE: wicket kendi sayfama yonlendirme.
10 ay önce
yeni bir mesaj yolladı. wicket kendi sayfama yonlendirme
11 ay önce
yeni bir mesaj yolladı. wicket kendi sayfama yonlendirme
11 ay önce

Top Contributors

71
ertugrula
53
Abdulkadir Selcukoglu
49
Altuğ Bilgin Altıntaş
32
wicket_id_tolga
30
Serhat Meşe