2012-04-23 75 views
1

我遇到了一個我花了太長時間試圖弄清楚的問題。休眠查詢如何以正確的格式獲取數據

我是新來的休眠,我有數據看起來像。

enter image description here

,我想編寫一個返回這個數據看起來像這樣的查詢。

enter image description here

如果這可以用一個SQL語句,我還是很陌生了Hibernate的精細化,這將是理想的實現。我嘗試了很多東西,我認爲我可以用聯盟來做,但不幸的是,休眠不支持聯合。

任何建議表示讚賞。如果建議是一個更加面向hibernate的方法,那麼儘可能多的細節將不勝感激。

UPDATE://

FROM Angelo的評論,我能得到這個工作使用下列內容:

String newQuery = ""; 
List<?> list = null; 
Query quer = null; 
Session session = null; 
session = HibernateUtilities.getSessionFactory().openSession(); 

newQuery = 
"SELECT DISTINCT o.APPLICATION,(SELECT DATA FROM " + dataTable + " gsm WHERE gsm.APPLICATION = o.APPLICATION AND gsm.NETWORK_TYPE = 'GSM Usage') AS gsm, (SELECT DATA FROM " + dataTable + " wifi WHERE wifi.APPLICATION = o.APPLICATION AND wifi.NETWORK_TYPE = 'Wi-Fi Usage') AS wifi, (SELECT DATA FROM " + dataTable + " roam WHERE roam.APPLICATION = o.APPLICATION AND roam.NETWORK_TYPE = 'ROAMING Usage') AS roaming FROM " + dataTable + " o"; 

quer = session.createQuery(newQuery); 
list = quer.list(); 
session.close(); 
+0

'用法'表示...分鐘?點擊? ... 什麼? – 2012-04-23 17:58:37

+0

也請不要使用屏幕截圖,如果可以避免的話,你可以使用4個空格來獲得一個代碼塊(固定寬度的字符)。 – 2012-04-23 17:59:41

+0

用法只是將數據列從一列分隔成多列 – Dave 2012-04-23 18:06:16

回答

1

您可以使用子查詢(在SQL,馬爾科在評論中說,它贏得在休眠「T工作。)

SELECT DISTINCT o.application, 
    (SELECT sum(DATA) FROM tbl gsm WHERE gsm.application = o.application AND gsm.network_type = 'GSM') AS gsm, 
    (SELECT sum(DATA) FROM tbl wifi WHERE wifi.application = o.application AND wifi.network_type = 'WIFI') AS wifi, 
    (SELECT sum(DATA) FROM tbl roam WHERE roam.application = o.application AND roam.network_type = 'ROAMING') AS roaming 
FROM tbl o 

(注意,我假設你的表被稱爲tbl

+0

不,休眠時,子查詢在select子句中不起作用。 – 2012-04-23 18:05:15

+0

非常感謝您的快速響應!這種方法對我來說確實有效。我不得不做一些修改。這是返回22結果而不是7,所以我在應用程序前添加了DISTINCT。除了那個和小名字的問題,這是完美的。非常感謝你!! – Dave 2012-04-23 18:27:49

+0

@Dyarish你好,我爲未來的讀者添加了DISTINCT。 – 2012-04-23 20:31:32