在hibernate中使用createSQLQuery获取计数(*)?

在hibernate中使用createSQLQuery获取计数(*)?,sql,hibernate,count,Sql,Hibernate,Count,我有几个sql查询,我只想在数据库中激发它们。 我在整个应用程序中都使用hibernate,所以我更喜欢使用hibernate来调用这个sql查询 在下面的示例中,我希望获得count+name,但在使用createSQLQuery时,我不知道如何获得该信息 我见过一些变通方法,人们只需要从结果中获得一个计数,但在本例中,我使用计数+列作为输出 SELECT count(*), a.name as count FROM user a WHERE a.user_id IN (SELECT b.us

我有几个sql查询,我只想在数据库中激发它们。 我在整个应用程序中都使用hibernate,所以我更喜欢使用hibernate来调用这个sql查询

在下面的示例中,我希望获得count+name,但在使用createSQLQuery时,我不知道如何获得该信息

我见过一些变通方法,人们只需要从结果中获得一个计数,但在本例中,我使用计数+列作为输出

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
...

如果SQL语句如下所示,请选择count*作为count,a.name作为name。。。您可以在查询中使用SetResultTransformerNewAliasToBeanResultTransformerYourSimpleBean.class。 其中,YourSimpleBean的整型计数和字符串名称字段分别为setters setCount和setName。
使用query.list执行查询时,hibernate将返回一个SimpleBeans列表

为信息托马斯干杯,他在生成对象方面做得非常好

我最初查询时遇到的问题是count是一个保留字:p
当我将名称更改为其他名称时,它起作用了。

或者,您可以使用

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
我在时间紧迫的情况下使用它,我觉得编写代码要比创建自己的bean和转换器快得多

干杯

雅库布