如何从计算行数的 SQL 查询开始正确实施 Hibernate SQL 查询?

How can I correctly implement an Hibernate SQL query starting from an SQL query that count the number of rows?

我完全是 Hibernate 的新手,我遇到了以下问题。

我有这个标准 SQL 查询:

SELECT count(*) 
FROM TID003_ANAGEDIFICIO anagraficaEdificio 
INNER JOIN TID002_CANDIDATURA candidatura 
  ON (candidatura.PRG_PAR = anagraficaEdificio.PRG_PAR AND candidatura.PRG_CAN = anagraficaEdificio.PRG_CAN)
INNER JOIN TID001_ANAGPARTECIPA anagPartecipa ON(anagPartecipa.PRG_PAR = candidatura.PRG_PAR)
INNER JOIN anagrafiche.TPG1029_PROVNUOIST provNuovIst ON (provNuovIst.COD_PRV_NIS = anagPartecipa.COD_PRV_NIS)
WHERE anagraficaEdificio.FLG_GRA = 1 AND provNuovIst.COD_REG = "SI";

这很好用 return 一个 整数 数字。

要知道的重要一点是,在此查询中,唯一 可以更改的参数(由用户在 Web 应用程序的前端插入)是最后一个(这个:provNuovIst.COD_REG = "SI")。

所以,我正在使用 Hibernate 的应用程序和要求说我必须使用 Hibernate Native SQL 来实现这个查询,我发现了这个教程:

http://www.tutorialspoint.com/hibernate/hibernate_native_sql.htm

显示此示例:

String sql = "SELECT * FROM EMPLOYEE WHERE id = :employee_id";
SQLQuery query = session.createSQLQuery(sql);
query.addEntity(Employee.class);
query.setParameter("employee_id", 10);
List results = query.list();

根据我的理解(如果我做错了断言请纠正我),涉及使用 Employee 模型 class。所以前面的查询首先定义查询(对参数使用 :param_name 语法),然后创建一个 SQLQuery Hibernate 对象,添加用于结果的 class,设置前面的参数 neam,最后获得一个列表(我认为 Hibernate 创建的类似于 ArrayList)检索到的对象。

我的问题是我必须获得一个 整数 值(因为我有一个 SELECT count(*),所以我将获得一个整数值而不是一组行)。

那么我如何才能正确使用 Hibernate Native SQL 将我的 SQL 查询实现到我的 Hibernate 存储库 class 中?

使用 SQLQuery.uniqueResult 从查询中检索单个值:

String sql = "SELECT count(*) ...";
SQLQuery query = session.createSQLQuery(sql);
// set parameters...
int count = ((Number)query.uniqueResult()).intValue();