Как вызвать хранимую процедуру в 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 есть три подхода к вызову процедуры хранилища базы данных.
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-query".
......
Вызовите это с помощьюgetNamedQuery().
Query query = session.getNamedQuery("callStockStoreProcedure") .setParameter("stockCode", "7277"); List result = query.list(); for(int i=0; i
Заключение
Вышеупомянутые три подхода делают то же самое, вызывают процедуру сохранения в базе данных. Между этими тремя подходами нет большой разницы, и какой метод вы выберете, зависит от ваших личных предпочтений.