В этом руководстве вы узнаете, как вызвать процедуру хранения в режиме гибернации.
Процедура хранения 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; i2. 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; i3. 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/”