[英]Get return value (scalar), not result table, from stored procedure using Java and Hibernate
我很難從使用 Hibernate 和 Java 的存儲過程獲取返回值(整數)。
我的存儲過程如下:
create proc dbo.CheckEquipmentAuthorization
@ReplicaId int
as
declare @IDAuthType int
select @IDAuthType = AuthorizationType.IDAuthorizationType from AuthorizationType
inner join ReplicaAuthorization on ReplicaAuthorization.RefIDAuthorizationType = AuthorizationType.IDAuthorizationType
inner join Replica_ReplicaAuthorization on Replica_ReplicaAuthorization.RefIDAuthorization = ReplicaAuthorization.IDAuthorization
inner join Replica on Replica.IDReplica = Replica_ReplicaAuthorization.RefIDReplica
where Replica.IDReplica = @ReplicaId
and GETDATE() between ReplicaAuthorization.AuthBegin and ReplicaAuthorization.AuthEnd
declare @AuthIntValue int
set @AuthIntValue = 10
if (@IDAuthType is not null)
begin
select @AuthIntValue = AuthorizationType.IntValue from AuthorizationType
where AuthorizationType.IDAuthorizationType = @IDAuthType
end
print @AuthIntValue
return @AuthIntValue
我正在嘗試使用以下方法獲取返回值:
query = session.createSQLQuery(
"exec CheckEquipmentAuthorization(:replicaId)")
.setParameter("replicaId", replicaId);
但似乎我只能使用它得到一個結果表,而且由於我的程序沒有生成結果表,我也不希望生成一個結果表,所以它失敗了。
有沒有辦法使用 createSQLQuery() 方法獲取返回值?
我正在使用 Hibernate、Java 和 SQL Server。 存儲過程工作正常(我已經用 sql 客戶端對其進行了測試)。
謝謝你。
這似乎是this的副本。 您是否映射了存儲過程的標量返回類型? 你正在翻譯成那種返回類型嗎?
在存儲過程中,我替換了
return @AuthIntValue
和
select @AuthIntValue as RetVat
我調用存儲過程並將結果轉換為我創建的對象的方式。
StoredProcResult o = (StoredProcResult)session.createSQLQuery("exec CheckEquipmentAuthorization :replicaId")
.addScalar("retVal", Hibernate.INTEGER)
.setParameter("replicaId", replicaId)
.setResultTransformer(Transformers.aliasToBean(StoredProcResult.class))
.setCacheMode(CacheMode.GET)
.uniqueResult();
int xpto = o.getRetVal();
StoredProcResult 對象:
public class StoredProcResult {
public int retVal;
public int getRetVal() {
return retVal;
}
public void setRetVal(int retVal) {
this.retVal = retVal;
}
}
我知道這已經很老了,但我發現自己遇到了同樣的問題,並在使用 MS SQL Server 時找到了一個簡單的解決方案。 修改您的原始查詢如下:
query = session.createSQLQuery(
"declare @result int; exec @result = CheckEquipmentAuthorization(:replicaId); select @result")
.setParameter("replicaId", replicaId);
現在您將獲得作為query.uniqueResult()
的返回碼,而無需修改原始存儲過程。 當您不能(或不想)修改原始存儲過程時,這會很方便。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.