Comment appeler une procédure stockée dans Hibernate

Comment appeler une procédure stockée dans Hibernate

Dans ce didacticiel, vous apprendrez à appeler une procédure de magasin dans Hibernate.

Procédure de stockage MySQL

Voici une procédure de magasin MySQL, qui accepte un paramètre de code boursier et renvoie les données boursières associées.

DELIMITER $$

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

DELIMITER ;

Dans MySQL, vous pouvez simplement l'appeler avec un mot-clécall:

CALL GetStocks('7277');

Procédure de stockage des appels Hibernate

Dans Hibernate, il existe trois approches pour appeler une procédure de stockage de base de données.

1. SQL natif - createSQLQuery

Vous pouvez utilisercreateSQLQuery() pour appeler directement une procédure de stockage.

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

List result = query.list();
for(int i=0; i

2. NamedNativeQuery dans l'annotation

Déclarez votre procédure de magasin dans l'annotation@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 {
...

Appelez-le avecgetNamedQuery().

Query query = session.getNamedQuery("callStockStoreProcedure")
    .setParameter("stockCode", "7277");
List result = query.list();
for(int i=0; i

3. requête sql dans le fichier de mappage XML

Déclarez votre procédure de magasin dans la balise "sql-query".

...

    
        
            
            
        
        
            
        
        ...
    

    
    
    
    

Appelez-le avecgetNamedQuery().

Query query = session.getNamedQuery("callStockStoreProcedure")
    .setParameter("stockCode", "7277");
List result = query.list();
for(int i=0; i

Conclusion

Les trois approches ci-dessus font la même chose, appelez une procédure de stockage dans la base de données. Il n'y a pas beaucoup de différence entre les trois approches, la méthode que vous choisissez dépend de vos préférences personnelles.