2012-12-27 39 views
0

我需要得到存儲過程執行的結果,假設我正好使用這個接口:org.hibernate.SQLQuery。如何使用Hibernate從SQL Server存儲過程獲取執行結果?

目前的代碼看起來像這樣:

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, @[email protected] OUTPUT; select @totalRes"); 

query.setString("list", list);query.setInteger("out", out); try { 
    Object result = query.uniqueResult(); } catch (HibernateException e) { ... } 

回答

1

這是一個來自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:使用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); 
} 

更新

僅僅是一個個人的選擇。

我會建議最適合您正在進行的項目的方法。

+0

使用指定查詢的偏好是什麼? – javagirl

+0

順便說一句,你如何從查詢對象獲得結果?你使用哪種查詢方法?列表,迭代,uniqueResult? – javagirl

+0

我用你想要的更新了答案。讓我知道這是否有幫助 – frictionlesspulley

相關問題