Рубрики
Без рубрики

Как вызвать хранимую процедуру в режиме гибернации

– Как вызвать хранимую процедуру в режиме гибернации

В этом руководстве вы узнаете, как вызвать процедуру хранения в режиме гибернации.

Процедура хранения 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');

Процедура хранения вызовов в режиме гибернации

В режиме гибернации существует три подхода для вызова процедуры хранилища базы данных.

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. sql-запрос в файле сопоставления XML

Объявите свою процедуру хранения внутри тега ” sql-запрос “.


...

    
        
            
            
        
        
            
        
        ...
    
    
    
	
	
	

Вызовите его с помощью getNamedQuery() .

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

Вывод

Вышеперечисленные три подхода делают одно и то же: вызывают процедуру хранения в базе данных. Между этими тремя подходами нет большой разницы, какой метод вы выберете, зависит от ваших личных предпочтений.

Оригинал: “https://mkyong.com/hibernate/how-to-call-store-procedure-in-hibernate/”