Problema Hibernate + Sybase (executar uma procedure)

0 respostas
silvano.pessoa

Pessoal estou implementando o hibernate em um projeto legado onde estou tendo problema ao executar procedure em uma base de dados Sybase. Notei que várias pessoas tiveram esse problema nos forum, porem não encontrei uma solução.
Alguem já teve esse problema?

Erro Apresentado:

could not execute query

com.sybase.jdbc3.jdbc.SybSQLException: Stored procedure 'spIncremento' may be run only in unchained transaction mode. The 'SET CHAINED OFF' command will cause the current session to use unchained transaction mode.

Procedure: Gera um novo numero sequencial do campo informado.

/*
exec  spIncremento 'cdUsuario', 1
*/
@Descricao char(30) ,  /* Nome da tabela e/ou nome do campo recebido para ser calculado */
@ncdConfig numeric(13) output
as
    declare @errno      int,
            @errmsg     varchar (255)

    if not exists(select 1 from SEQUENCIA where dsConfig = @Descricao)
    begin
            if not exists(select 1 from syscolumns where name = @Descricao)
        begin
                select @errno  = 30005
            select @errmsg = " spIncremento >> Nao existe a coluna na syscolumns com referencia na                    SEQUENCIA," + " Verifique a coluna " + @Descricao + " <<"
            goto Error
        end
        else
        begin
           --insere o codigo incrementado
            insert SEQUENCIA
            (dsConfig, cdConfig)
            values
            (@Descricao, 1)
            if @@error != 0
            begin
                select @errno  = 30000
                select @errmsg = " spIncremento >> Nao foi possivel inserir na tabela SEQUENCIA << "
                goto Error
            end
            select @ncdConfig = 1
        end
           goto Fim
    end

--  Atribui o contador a variavel e incrementa no Banco
    update SEQUENCIA
    set cdConfig = cdConfig + 1, @ncdConfig = cdConfig + 1
    where dsConfig = @Descricao
    if @@error != 0
    begin
        select @errno  = 30001
        select @errmsg = " spIncremento >> Nao foi possivel atualizar a tabela SEQUENCIA << "
        goto Error
    end
Fim:
    return (@ncdConfig)
Error:
    raiserror @errno @errmsg
    return 1
SQL.HBM.XML
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
      "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
      "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
      <sql-query  name="spIncrementoDAO" callable="true">
            <![CDATA[ { call spIncremento(?,?)}  ]]>
      </sql-query>
</hibernate-mapping>
Método
public long spIncremento(){
            try{
                  //Nome da Procedure: spIncrementoDAO    
                  Query query = session.getNamedQuery("spIncrementoDAO");
                  //Primeiro parametro nome do campo: cdItemEquipamento
                  query.setParameter(0, "cdItemEquipamento");
                  //Segundo parametro
                  query.setParameter(1, 1);
                  //Resultado
                  Long ret = (Long) query.uniqueResult();
                  return ret;
            } catch (Exception e) {
                  e.getStackTrace();
            }
            return 0;
      }
Criado 3 de janeiro de 2011
Respostas 0
Participantes 1