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
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 手順]