如果有一個存儲函數在數據庫中執行內容並返回一個標量(例如,生成的密鑰)。我已經將它定義爲一個NamedStoredProcedureQuery:如何從@NamedStoredProcedureQuery獲取標量結果?
@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提供者,休眠,不知道它應該期望結果被返回。生成的SQL如下所示:
12:10:34,960 INFO SchemaCreatorImpl:489 - HHH000476: Executing import script 'org.hiber[email protected]30135202'
Hibernate:
{call dbo.do_something(?,?,?,?)}
12:10:35,251 TRACE BasicBinder:95 - binding parameter [param] as [INTEGER] - [1]
現在問題很明顯。調用語句不會爲返回值提供綁定變量。恕我直言,它應該是{? = call dbo.do_something(?)}
。
我曾嘗試將returnsResultSet=true
添加到NamedStoredProcedureQuery,但Hibernate 5.2.10.Final似乎沒有實現 - 即使Hibernate聲稱是JPA 2.1兼容。另一個嘗試是添加resultClass = Integer.class
,但也失敗了。看起來resultClass必須是一個實體。它不適用於標量。
sp以哪種方式返回標量值?輸出參數,SELECT @R或RETURN @R? – MtwStark
它使用RETURN @R。 – fhossfel