このチュートリアルでは、Hibernateでストアプロシージャを呼び出す方法を学習します。

MySQLストアドプロシージャ

ここにはMySQLのストアドプロシージャがあり、ストックコードパラメータを受け取り、関連する在庫データを返します。

DELIMITER $$

CREATE PROCEDURE `GetStocks`(int__stockcode varchar(20))
BEGIN
   SELECT **  FROM stock where stock__code = int__stockcode;
   END $$

DELIMITER ;

MySQLでは、

call

キーワードで簡単に呼び出すことができます:

CALL GetStocks('7277');

Hibernateコールストアプロシージャ

Hibernateでは、データベースストアプロシージャを呼び出す3つの方法があります。

1.ネイティブSQL – createSQLQuery

Query query = session.createSQLQuery(
    "CALL GetStocks(:stockCode)")
    .addEntity(Stock.class)
    .setParameter("stockCode", "7277");

List result = query.list();
for(int i=0; i<result.size(); i++){
    Stock stock = (Stock)result.get(i);
    System.out.println(stock.getStockCode());
}

2.アノテーション内のNamedNativeQuery

ストアプロシージャを

@ NamedNativeQueries

アノテーション内に宣言します。

…​.//Stock.java
…​

@NamedNativeQueries({
    @NamedNativeQuery(
    name = “callStockStoreProcedure”、
    query = “CALL GetStocks(:stockCode)”を呼び出し、
    resultClass = Stock.class
    )
})
@エンティティ
@Table(name = “stock”)
パブリッククラスStockはjava.io.Serializable {
…​

**  getNamedQuery()** で呼び出します。

Query query = session.getNamedQuery(“callStockStoreProcedure”)
.setParameter(“stockCode”, “7277”);
List result = query.list();
for(int i=0; i<result.size(); i++){
Stock stock = (Stock)result.get(i);
System.out.println(stock.getStockCode());
}

===  3. XMLマッピングファイル内のsql-query

ストアプロシージャを "**  sql-query ** "タグの中に宣言します。

<!– Stock.hbm.xml -→
…​

<hibernate-mapping> <class name = “com.mkyong.common.Stock” table = “stock” …​> <id name = “stockId” type = “java.lang.Integer”> <列名= “STOCK

ID “列名=” STOCK

CODE “長さ=” 10 “not-null =” true “unique =”列挙型 ” “true”/> </property> …​

</class>
    
    <sql-query name = “callStockStoreProcedure”>
    <return alias = “stock” class = “com.mkyong.common.Stock”/>
    <![CDATA[CALL GetStocks(:stockCode)]]>
    </sql-query>
    
</hibernate-mapping>

**  getNamedQuery()** で呼び出します。

クエリクエリ= session.getNamedQuery( “callStockStoreProcedure”)
    .setParameter( “stockCode”、 “7277”);
リスト結果= query.list();
for(int i = 0; i <result.size(); i){
    株価=(株)result.get(i);
    System.out.println(stock.getStockCode());
}

===結論

上記の3つのアプローチは同じことをしている、店を呼び出す
データベース内のプロシージャそれほど大きな違いはありません
あなたが選ぶ方法はあなたの個人的な
好む。

link://tag/hibernate/[hibernate]link://タグ/ストアドプロシージャ/[stored
手順]