liberação de Id com Hibernate?

3 respostas
D

Pessoal eh o seguinte, tenho uma classe pessoa que possu “n” enderecos. Quando eu gravo a tabela pessoa automaticamente ele grava os enderecos, até ai tudo bem. O problema comça quando eu mando gravar, sempre utilizo saveOrUpdate, e por um motivo qualquer o banco me retorna um erro, ai o hibernate atribui id para todas as instâncias dos meus objetos enderecos e depois do erro ele não volta para null, com isso quando eu mando gravar novamente ocorre o seguinte erro: Batch update returned unexpected row count from update: 1 actual row count: 0 expected: 1

Alguém saberia solucionar esse problema?

3 Respostas

_fs

Qual erro o banco retorna primeiro?

Você tenta regravar o objeto mesmo logo após de retornar erro? Não é melhor tratar a exceção?

D

O erro eh esse que falei …
Batch update returned unexpected row count from update: 1 actual row count: 0 expected: 1

_fs

Este erro ocorre por outro motivo. No caso seu objeto transiente deveria conter um ID que aponta para o banco de dados, mas não é o que ocorre.

Algumas coisas podem estar acontecendo, provavelmente o fluxo da aplicação deixa o objeto neste estado ilegal.

Sugestão: escreva um teste simples e veja se funciona, algo como

Pessoa p = new Pessoa( "daniel" );
Endereco end1 = new Endereco( "rua 123" );
Endereco end2 = new Endereco( "rua 321" );
p.addEndereco( end1 );
p.addEndereco( end2 );

session.saveOrUpdate( p );

De qualquer maneira recomendo que verifique o método equals() das classes Pessoa e Endereco. Já recebi este erro por ter mal-implementado este método.

Criado 7 de junho de 2006
Ultima resposta 8 de jun. de 2006
Respostas 3
Participantes 2