Как вызвать хранимую процедуру в 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
Заключение
Вышеупомянутые три подхода делают то же самое, вызывают процедуру сохранения в базе данных. Между этими тремя подходами нет большой разницы, и какой метод вы выберете, зависит от ваших личных предпочтений.