Erro no comit

4 respostas
O

Boa tarde galera. Estou testando um codigo com hibernate e oracle e esta dando um erro na sequencia da coluna. Exemplo:
Eu tenho uma tabela com o id autoincrementado. Quando o hibernate vai dar um comit nessa entity e por acaso possui algum codigo que gera um erro o campo autoincremento muda.
Tipo:
Ultimo registro era idCliente = 22. Dae eu salvo um outro dado com um erro de sql (por exemplo violacao de integridade). Depois eu conserto o erro e dou um save denovo, quando eu vou ver no banco o registro que cadastrei vai ficar com o idCliente = 24. Ou seja ele pula. Tentei dar um rollback no catch() e nao da certo. Gostaria de saber como voces usam campos autoincremente?

protected static void comitTransacao() {
		try {
			if (transacao != null && !transacao.wasCommitted() && !transacao.wasRolledBack())
				transacao.commit();
		} catch (HibernateException he) {
			rollbackTransaction();
			he.printStackTrace();
						
		}
	}

protected static void rollbackTransaction() { try { if (transacao != null && !transacao.wasCommitted() && !transacao.wasRolledBack()) transacao.rollback(); } catch (HibernateException he) { he.printStackTrace(); } finally { closeSessao(); } }

4 Respostas

rafaelglauber

Se tiver usando sequence não terá jeito, a menos que você tenha um programa que verifique que o valor anterior não foi usando por registro algum e set a sequence para ele, mas acredito que seja um esforço grande de programação para pouca utilidade. Por quê tem tanto interesse em não haver saltos de códigos, não seria melhor realizar validação antes a gravação?

O

Mas essa validacao nao consumira tempo? Digamos que vamos cadastrar uma empresa e o banco contem uns 1000 registros. Antes de cadastrar a empresa eu tenho que efetuar uma busca no banco para ver se esse CNPJ ja existia. Se acaso exista informa para o usuario e o bloco nao entra no comit(), se nao cadastra e usa a sequancia. Isso seria o correto?

rafaelglauber

sim, mas para isso existe o Hibernate-Validator.

midianet

concordo com o rafaelglauber nao tente complicar as coisas, facilite-as ao máximo e ganhe tempo e dinheiro.

uma primeira premissa na vida deveria não reinventar a roda, nada se cria tudo se copia :stuck_out_tongue:

Criado 10 de janeiro de 2008
Ultima resposta 10 de jan. de 2008
Respostas 4
Participantes 3