Hibernateでストアドプロシージャを呼び出す方法
このチュートリアルでは、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
createSQLQuery()を使用して、ストアード・プロシージャーを直接呼び出すことができます。
Query query = session.createSQLQuery( "CALL GetStocks(:stockCode)") .addEntity(Stock.class) .setParameter("stockCode", "7277"); List result = query.list(); for(int i=0; i
2. アノテーションのNamedNativeQuery
@NamedNativeQueriesアノテーション内でストアドプロシージャを宣言します。
//Stock.java ... @NamedNativeQueries({ @NamedNativeQuery( name = "callStockStoreProcedure", query = "CALL GetStocks(:stockCode)", resultClass = Stock.class ) }) @Entity @Table(name = "stock") public class Stock implements java.io.Serializable { ...
getNamedQuery()で呼び出します。
Query query = session.getNamedQuery("callStockStoreProcedure") .setParameter("stockCode", "7277"); List result = query.list(); for(int i=0; i
3. XMLマッピングファイルのsql-query
「sql-query」タグ内でストアドプロシージャを宣言します。
......
getNamedQuery()で呼び出します。
Query query = session.getNamedQuery("callStockStoreProcedure") .setParameter("stockCode", "7277"); List result = query.list(); for(int i=0; i
結論
上記の3つのアプローチは同じことを行っており、データベースのストアプロシージャを呼び出します。 3つのアプローチに大きな違いはありません。どの方法を選択するかは、個人の好みによって異なります。