2012-04-23 48 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