簡體   English   中英

如何使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM