1

私は 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";

これは正常に機能し、整数を返します。

知っておくべき重要なことは、このクエリで変更できる唯一のパラメーター (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モデルクラスの使用が含まれます。そのため、前のクエリでは最初にクエリを定義し (パラメーターに:param_name構文を使用)、次にSQLQuery Hibernate オブジェクトを作成し、結果に使用されるクラスを追加し、前のパラメーター neam を設定し、最後にリストを取得します (Hibernate が作成すると思います)。ArrayListのようなものとして)取得したオブジェクトを使用します。

私の問題は、単に整数値を取得する必要があることです( SELECT count(*)があるため、行のセットではなく整数値を取得します)。

では、 Hibernate Native SQLを正しく使用して SQL クエリを Hibernate リポジトリ クラスに実装するにはどうすればよいでしょうか?

4

1 に答える 1

1

SQLQuery.uniqueResultクエリから単一の値を取得するために使用します。

String sql = "SELECT count(*) ...";
SQLQuery query = session.createSQLQuery(sql);
// set parameters...
int count = ((Number)query.uniqueResult()).intValue();
于 2016-03-08T10:56:37.207 に答える