2010-04-01 46 views
1

我有几个sql查询,我只是想在数据库中触发。 我在整个应用程序中使用hibernate,所以我宁愿使用hibernate来调用这个sql查询。在hibernate中使用createSQLQuery获取count(*)?

在下面的示例中,我想获得count + name,但无法弄清楚如何在使用createSQLQuery()时获取该信息。

我见过的解决方法,人们只需要从结果得到了一个“计数()”,但在这种情况下,我使用count()+为一列输出中

SELECT count(*), a.name as count FROM user a 
WHERE a.user_id IN (SELECT b.user_id FROM user b) 
GROUP BY a.name 
HAVING COUNT(*) BETWEEN 2 AND 5; 

仅供参考,上面的查询会带来这样的结果,如果我直接调用它的数据库:

1, John 
2, Donald 
1, Ralph 
... 

回答

0

干杯的信息托马斯,曾妙生成对象

的问题,我与我的初始查询是“伯爵”是一个保留字:P 当我的名字改为否则它工作的东西。

0

如果您的SQL语句看起来像这样SELECT count(*) as count, a.name as name...,你可以在你的使用。
其中YourSimpleBean分别具有字段Integer countString name设置者setCountsetName
使用query.list()执行查询时,hibernate将返回YourSimpleBeans列表。

3

或者,你可以使用

SQLQuery query = session.createSQLQuery("SELECT count(*) as num, a.name as name FROM user a WHERE a.user_id IN (SELECT b.user_id FROM user b) GROUP BY a.name HAVING COUNT(*) BETWEEN 2 AND 5;"; 

query.addScalar("num", Hibernate.INTEGER).addScalar("name", Hibernate.STRING); 
// you might need to use org.hibernate.type.StandardBasicTypes.INTEGER/STRING 
// for Hibernate v3.6+, 
// see https://hibernate.onjira.com/browse/HHH-5138 

List<Object> result = query.list(); 
// result.get(2*i + 0) -> i-th row num 
// result.get(2*i + 1) -> i-th row name 

我在时间压力的情况下,使用此,海事组织更快的代码,然后创建自己的豆子&变压器。

干杯!

Jakub

相关问题