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
<?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>
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;
}