Hibernateでストアドプロシージャを呼び出す方法

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つのアプローチに大きな違いはありません。どの方法を選択するかは、個人の好みによって異なります。