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