java - 如何从 hibernate 中的存储过程中获取输出值(SQL SERVER)

标签 java sql-server hibernate stored-procedures

我在 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

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

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

<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”,但未提供。

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

最佳答案

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

关于java - 如何从 hibernate 中的存储过程中获取输出值(SQL SERVER),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17110885/

相关文章:

java - SimpleNLG - 如何获得名词的复数形式?

java - 使用对象调用方法时遇到问题

sql - 在 SQL 中连接多个表

java - Spring,在 Hibernate 中创建当前日期的注释?

java - Junit/ Spring /hibernate : How to specify an out of container datasource for Hibernate Session in Unit tests

java - 处理 JFileChooser 窗口关闭?

java - 不明白为什么条件 "OR"运算符不适合我?

大表上的 SQL 查询先快后慢

asp.net - SQL Server 数据归档

hibernate 调用需要超过一分钟