1

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 クライアントでテストしました)。

ありがとうございました。

4

3 に答える 3

2

ストアドプロシージャで、私は置き換えました

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;
    }
}
于 2012-05-15T21:46:24.663 に答える
2

これはこれの複製のようです。ストアド プロシージャのスカラー戻り値の型をマップしましたか? そして、その戻り値の型に変換していますか?

于 2012-05-13T18:33:22.540 に答える