我在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:参数#3尚未设置
如果我删除?我得到了
java.sql.SQLException:过程或函数'insertData'需要参数'@ID',这是未提供的。
有谁知道代码/映射文件应该如何?提前致谢
答案 0 :(得分:4)
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());
}