ホームページ >データベース >mysql チュートリアル >Java でストアド プロシージャを呼び出す場合、JPA と CallableStatement はどのように異なりますか?
Java、JPA、およびストアド プロシージャの相互作用: 比較
Java アプリケーションは、いくつかの方法を使用してストアド プロシージャと対話できます。この記事では、JPA と CallableStatement
に焦点を当て、そのアプローチ、利点、SQL 構文を比較します。
JPA と CallableStatement
: 詳細な外観
JPA 2.1 では、ストアド プロシージャ呼び出しのサポートが導入されました。 CallableStatement
とは異なり、JPA はパラメーター マッピングを自動的に処理することでプロセスを簡素化し、よりクリーンで保守しやすいコードを実現します。
ストアド プロシージャの呼び出し: SQL 構文
JPA で getEmployeeDetails
ストアド プロシージャを呼び出すには、次の SQL を使用します。
<code class="language-sql">{call getEmployeeDetails(?,?)}</code>
?
プレースホルダーは入力パラメーター (ここでは、employeeId
と companyId
) を表します。
JPA の例
このコード スニペットは、JPA のストアド プロシージャ呼び出し機能を示しています。
<code class="language-java">Query query = em.createNativeQuery("{call getEmployeeDetails(?,?)}", EmployeeDetails.class) .setParameter(1, employeeId) .setParameter(2, companyId); List<EmployeeDetails> result = query.getResultList();</code>
CallableStatement
アプローチ
対照的に、CallableStatement
では手動でパラメータの登録と実行が必要です。
<code class="language-java">CallableStatement cstmt = connection.prepareCall("{call getEmployeeDetails(?,?)}"); cstmt.setInt(1, employeeId); cstmt.setInt(2, companyId); ResultSet rs = cstmt.executeQuery();</code>
JPA ベストプラクティス
{call sp_name(?,?)}
.resultSetMapping
を定義するか、結果クラスを指定します。重要な考慮事項
JPA のストアド プロシージャ呼び出し機能には、CallableStatement
と比較して制限があります。 具体的には、OUT パラメータへの直接アクセスはサポートされておらず、複数の結果セットを返すことは許可されていません。
以上がJava でストアド プロシージャを呼び出す場合、JPA と CallableStatement はどのように異なりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。