如何使用Hibernate从SQL Server存储过程中获取执行结果?

时间:2012-12-27 16:32:18

标签: java sql-server 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) { ... }

1 个答案:

答案 0 :(得分: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:(取自博文中的示例)

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只是个人选择。

我建议最适合您正在进行的项目的方法。