![](/img/trans.png)
[英]How to get OUTPUT value from stored procedure in hibernate (SQL SERVER)
[英]How to get the execution result from SQL Server stored procedure using Hibernate?
假設我正使用以下接口,則需要獲取存儲過程執行的結果:org.hibernate.SQLQuery。
當前代碼如下所示:
SQLQuery query = s.createSQLQuery("exec myProc :list, :out);
query.setString("list", list);
query.setInteger("out", out);
try {
query.executeUpdate();
} catch (HibernateException e) { ... }
如果我將其更改為:-可以使用嗎?
SQLQuery query = s.createSQLQuery("DECLARE @totalRes INT ; exec myProc
:list, @myInnerParam=@totalRes OUTPUT; select @totalRes");
query.setString("list", list);query.setInteger("out", out); try {
Object result = query.uniqueResult(); } catch (HibernateException e) { ... }
這是Hibernate中存儲過程的示例。
我沒有使用這里建議的所有技術,但通常使用NamedQuery方法
存儲過程:(這將根據基礎數據庫而改變)
ALTER PROCEDURE [dbo].[CL_ServiceHoursImport]
@orderId int = 0
AS
select Id, Name from OrderProducts where OrderId = @orderId;
定義命名查詢:(可以使用不同的方式進行定義)
<sql-query name="myProcNamedQuery">
<return alias="output" class="com.stackoverflow.StoredProcedureOutput"/>
<![CDATA[exec GetStocks :orderId]]>
</sql-query>
輸出類別
public class StoredProcedureOutput{
private int Id;
private String Name;
@Override
public String toString(){
return Id + " " + Name + "\n";
}
// getter setters
}
調用NamedQuery :(摘自博客文章中的示例)
Query query = session.getNamedQuery("myProcNamedQuery")
.setParameter("orderId", orderId);
for(int i=0; i<result.size(); i++){
StoredProcedureOutput output = (StoredProcedureOutput)result.get(i);
System.out.println(output);
}
更新
使用NamedQuery只是個人選擇。
我建議最適合您正在進行的項目的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.