データベースに、複数の OUT パラメータを含むストア プロシージャがあります。JPA (Hibernate を使用) を使用して結果セットを取得したいと考えています。OUT パラメータからすべての結果を取得する方法はありますか?
たとえば、CallableStatement を使用する場合、これらのパラメーターに「.registerOutParameter」を使用できます。JPAに相当するものが欲しい(存在する/可能であれば)。
使用するデータベースは PostgreSQL です。
データベースに、複数の OUT パラメータを含むストア プロシージャがあります。JPA (Hibernate を使用) を使用して結果セットを取得したいと考えています。OUT パラメータからすべての結果を取得する方法はありますか?
たとえば、CallableStatement を使用する場合、これらのパラメーターに「.registerOutParameter」を使用できます。JPAに相当するものが欲しい(存在する/可能であれば)。
使用するデータベースは PostgreSQL です。
JPA2.1 は、必要に応じて StoredProcedure をサポートします (まだ最終版ではありません)。この AFAIK のプレビュー機能を提供する唯一の JPA 実装はDataNucleus JPAです。他の JPA impl には独自の非標準サポートがある場合があるため、そのルートに進みたい場合はマニュアルを確認してください
ここでは、カスタム リポジトリを実装することで、Spring Data JPA リポジトリからストアド プロシージャを簡単に呼び出すことができます。
以下のメソッドの実装の下で、実装する方法です
StoredProcedureQuery storedProcedure = entityManager.createStoredProcedureQuery("Your Stored Procedure name");
// Set the parameters of the stored procedure.
String firstParam = "first param name";
storedProcedure.registerStoredProcedureParameter(firstParam, Long.class, ParameterMode.IN);
storedProcedure.setParameter(firstParam, first Param value);
// Set the second parameters of the stored procedure.
String secondParam = "second parameter name";
storedProcedure.registerStoredProcedureParameter(secondParam, String.class, ParameterMode.IN);
storedProcedure.setParameter(secondParam, "second paramter value);
//Your OUT parameters.
storedProcedure.registerStoredProcedureParameter("First OUT parameter name", Integer.class, ParameterMode.OUT);
storedProcedure.registerStoredProcedureParameter("OUT second parameter name", Integer.class, ParameterMode.OUT);
storedProcedure.execute();
//Replace MyObject with your actual POJO
MyObject myObject= new MyObject();
myObject.setFirstParameterOutput((Integer) storedProcedure.getOutputParameterValue("first OUT parameter name"));
myObject.setSecondParameterOutput((Integer) storedProcedure.getOutputParameterValue("second OUT parameter name"));
return MyObject;
注:@Procedureに注釈を付けることで、リポジトリ自体から呼び出すこともできます
@Procedure
public Integer procedure_name(String firstParameter, Date secondParameter);
}