【问题标题】:How to get OUTPUT value from stored procedure in hibernate (SQL SERVER)如何从休眠中的存储过程中获取输出值(SQL SERVER)
【发布时间】:2013-06-11 05:52:01
【问题描述】:

我在MS SQL Server中有存储过程

CREATE PROC dbo.insertData 
    @param1 nvarchar(11),
    @param2 nvarchar(30),
    @ID bigint OUTPUT
AS 
BEGIN   
    INSERT INTO dbo.Adaptor (Col1, Col2) VALUES (@param1, @param2)
    SET @ID = SCOPE_IDENTITY(); 
END

我想在java中获取这个生成的ID作为输出参数。

我已经创建了一个映射文件

<sql-query name="insertData" callable="true">
    <return alias="adaptor" class="MyClass">
        <return-property name="id" column="ID" />
    </return>
    { ? = call InsertData(:param1, :param2) }
</sql-query>

并尝试从 java 中执行它

  Query query = entityManager.createNamedQuery("insertData");

            query.setParameter("param1", object);
            query.setParameter("param2", getName());
            // TODO try to use getSingleResult in tests
            List result = query.getResultList();

但是我有异常 java.sql.SQLException: Parameter #3 has not been set

如果我删除 ? = 我明白了

java.sql.SQLException:过程或函数“insertData”需要参数“@ID”,但未提供该参数。

有人知道代码/映射文件应该是什么样子吗?提前致谢

【问题讨论】:

  • 不,我在获取 sproc 中为 OUTPUT 的文件的值时遇到问题。如何执行我在问题中展示的存储过程

标签: java sql-server hibernate stored-procedures


【解决方案1】:
Query query = session.createSQLQuery(
    "CALL GetStocks(:stockCode)")
    .addEntity(Stock.class)
    .setParameter("stockCode", "7277");

List result = query.list();
for(int i=0; i<result.size(); i++){
    Stock stock = (Stock)result.get(i);
    System.out.println(stock.getStockCode());
}

from here

【讨论】:

  • 1) 我没有会话对象。仅限实体管理器。 2)在我的情况下执行插入语句。另外我还有一个参数,在 sql server 中标记为输入/输出。而且我不知道如何处理它
  • createSQlQuery 只允许您运行本机 sql ...返回的值将以相同的方式处理
猜你喜欢
  • 2012-01-26
  • 2017-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-03
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
相关资源
最近更新 更多