在hibernate中使用createSQLQuery获取计数(*)?
我有几个sql查询,我只想在数据库中激发它们。 我在整个应用程序中都使用hibernate,所以我更喜欢使用hibernate来调用这个sql查询 在下面的示例中,我希望获得count+name,但在使用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
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和转换器快得多
干杯
雅库布