【问题标题】:How to call ms sql store procedure using hibernate 4.0如何使用休眠 4.0 调用 ms sql 存储过程
【发布时间】:2014-03-02 11:04:06
【问题描述】:

我正在处理存储过程 即

CREATE PROCEDURE test 
(
@INPUTPARAM INT,
@OUTPUTPARAM VARCHAR(20)
)
AS
SELECT @OUTPUTPARAM=S.NAME+','+D.NAME
FROM STUDENT S,DEPARTMENT D
WHERE S.DEPTID=D.DEPARTID AND D.DEPARTID=@INPUTPARAM
BEGIN
END

如何使用hibernate从java类中取出参数 请分享代码示例

【问题讨论】:

    标签: java sql-server hibernate stored-procedures


    【解决方案1】:

    唯一的方法是使用em.createNativeQuery 并在 SQL 中直接与您的数据库服务器对话。

    更新:

    这里是如何做到的:

    //get connection from em
    Session session = (Session)em.getDelegate();
    Connection conn = session.connection();
    
    //Native SQL
    final CallableStatement callStmt = conn.prepareCall("{call your.function(?)}");
    callStmt.setLong(1, documentId);
    callStmt.execute();
    
    if (callStmt.getMoreResults()) {
       ResultSet resSet = cStmt.getResultSet();
       //Do something good with you result
       resSet.close();
    }
    callStmt.close();
    
    //Don't know if calling conn.close(); is a good idea. Since the session owns it.
    

    希望能有所帮助。

    注意事项:

    如果您使用的是 JPA 2.0,you can get the session using

    Connection conn = em.unwrap(Session.class).connection();
    

    如果你使用的是JPA 2.1,可以调用存储过程directly

     StoredProcedureQuery query = em.createNamedStoredProcedureQuery("ReadAddressById");
     query.setParameter("P_ADDRESS_ID", 12345);
     List<Address> result = query.getResultList();
    

    【讨论】:

    • 也许this可以帮到你。
    • 对我的答案投反对票的原因是什么?
    【解决方案2】:
    CREATE PROCEDURE test 
    (
    @INPUTPARAM INT,
    @OUTPUTPARAM VARCHAR(20) OUTPUT --<-- You need to use key word "OUTPUT" here
    )
    AS
    BEGIN
    
      SELECT @OUTPUTPARAM = S.NAME + ',' + D.NAME
      FROM  STUDENT S INNER JOIN DEPARTMENT D
      ON    S.DEPTID = D.DEPARTID         --<-- Use New Syntax of join with On Clause
      WHERE D.DEPARTID = @INPUTPARAM
    
    END
    

    执行程序

    DECLARE @Var VARCHAR(20);
    EXECUTE dbo.test 
    @INPUTPARAM = 1
    @OUTPUTPARAM = @Var OUTPUT --<-- use OUTPUT key word here as well
    
    SELECT  @Var
    

    【讨论】:

    • 对不起,这是我的打字错误,我想从java代码而不是查询浏览器调用程序
    • 如果您想检索值,您需要将参数设为 OUTPUT 参数。
    • out 参数让我在调用存储过程时感到困惑。我不知道如何使用休眠注册输出参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-18
    • 2019-02-20
    • 2014-07-26
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    相关资源
    最近更新 更多