0

データベースに、複数の OUT パラメータを含むストア プロシージャがあります。JPA (Hibernate を使用) を使用して結果セットを取得したいと考えています。OUT パラメータからすべての結果を取得する方法はありますか?

たとえば、CallableStatement を使用する場合、これらのパラメーターに「.registerOutParameter」を使用できます。JPAに相当するものが欲しい(存在する/可能であれば)。

使用するデータベースは PostgreSQL です。

4

3 に答える 3

1

JPA2.1 は、必要に応じて StoredProcedure をサポートします (まだ最終版ではありません)。この AFAIK のプレビュー機能を提供する唯一の JPA 実装はDataNucleus JPAです。他の JPA impl には独自の非標準サポートがある場合があるため、そのルートに進みたい場合はマニュアルを確認してください

于 2012-04-20T11:39:47.800 に答える
0

ここでは、カスタム リポジトリを実装することで、Spring Data JPA リポジトリからストアド プロシージャを簡単に呼び出すことができます。

  1. インターフェイスを作成し、メソッドを定義します。
  2. そのための impl を作成し、@Repository で注釈を付けます
  3. 以下のメソッドの実装の下で、実装する方法です

     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);

 }
于 2017-09-19T13:56:09.130 に答える