Sql server 如何从@NamedStoredProcedureQuery获取标量结果?

Sql server 如何从@NamedStoredProcedureQuery获取标量结果?,sql-server,hibernate,jpa,stored-functions,Sql Server,Hibernate,Jpa,Stored Functions,If有一个存储函数,该函数在数据库中进行填充并返回标量(例如,生成的键)。我将其定义为命名存储过程: @NamedStoredProcedureQuery(name="do_something", procedureName = "dbo.do_something", parameters = { @StoredProc

If有一个存储函数,该函数在数据库中进行填充并返回标量(例如,生成的键)。我将其定义为命名存储过程:

@NamedStoredProcedureQuery(name="do_something", 
                           procedureName = "dbo.do_something", 
                           parameters = {
                                 @StoredProcedureParameter(mode = ParameterMode.IN, type = Integer.class, name = "param")
                                        }
)
我使用实体管理器调用该函数:

Query doSomethingQuery = em.createNamedStoredProcedureQuery("do_something");
doSomething.setParameter("param", 1);
Object result = doSomething.getSingleResult();
调用了存储的函数,但我的JPA提供程序Hibernate似乎不知道应该返回结果。生成的SQL如下所示:

12:10:34,960  INFO SchemaCreatorImpl:489 - HHH000476: Executing import script 'org.hibernate.tool.schema.internal.exec.ScriptSourceInputNonExistentImpl@30135202'
Hibernate: 
    {call dbo.do_something(?,?,?,?)}
12:10:35,251 TRACE BasicBinder:95 - binding parameter [param] as [INTEGER] - [1]
现在问题很明显。call语句没有为返回值提供绑定变量。IMHO应该是
{?=调用dbo.do\u something(?)}

我曾尝试将
returnsResultSet=true
添加到namedStoredProcedureRequesty中,但Hibernate 5.2.10.Final似乎没有实现,尽管Hibernate声称与JPA 2.1兼容。另一个尝试是添加
resultClass=Integer.class
,但也失败了。似乎resultClass必须是一个实体。它不适用于标量。

“存储过程/函数必须返回一个resultset作为第一个输出参数,才能使用Hibernate”

请参阅以供参考

尝试使用

SELECT @R
而不是

RETURN @R

您还可以尝试在返回之前添加SELECT(对于现有代码)

sp以何种方式返回标量值?输出参数,选择@R或RETURN@R?它使用RETURN@R。感谢您指出文档中的部分。我想这是正确的答案,但恐怕我不能更改过程的签名,因为它被遗留代码使用。我可能得用包装纸。我将提交一个CR,以便将此功能添加到Hibernate。只需在返回之前添加SELECT,就可以使用现有代码