1

我有一个问题,我花了太长时间试图弄清楚。

我是休眠新手,我有看起来像的数据。

在此处输入图像描述

我想写一个查询,返回这个数据看起来像这样。

在此处输入图像描述

如果这可以只用一条 SQL 语句来完成,那将是理想的,因为我仍然非常不熟悉 hibernate 的一些更精细的特性。我已经尝试了很多事情,我认为我可以使用 Unions 来做到这一点,但不幸的是 hibernate 不支持 unions。

任何建议表示赞赏。如果该建议是一种更加面向休眠的方法,那么将不胜感激尽可能多的细节。

更新://

从 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();
4

1 回答 1

1

您可以使用子选择(在 SQL 中,Marko 在评论中说它在 Hibernate 中不起作用。)

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

于 2012-04-23T18:02:47.557 回答