GRAVE: Could not synchronize database state with session

07/12/2011

0

Bom dia meus caros.

Estou desenvolvendo uma aplicação JSE com um CRUD básico , para persistência utilizo Hibernate. Bem , irei passar a ideia do sistema: tenho uma tela de cadastro que funciona blz, os dados estou apresentando em um JTable, onde dou a opção de alterar ou excluir algum registro. Ao clicar em alterar eu pego os dados da linha selecionada dou um setVisible(true) abro minha tela de alteração e na hora que clico no botão –confirmar alteracao- o seguinte erro acontece:

GRAVE: Could not synchronize database state with session
org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1.

Algum dos mestres já passaram por isto? Alguma dica ou solução?
Lucas Costa

Lucas Costa

Responder

Posts

07/12/2011

Anthony Accioly

As três causas mais comuns para essa exceção são:

1. O mapeamento do ID da entidade difere da PK no banco. (Nesse caso, ao fazer o update, o hibernate não está encontrando a linha a ser atualizada)... Para identificar esse erro, habilite o log do hibernate (setando os parâmetros: hibernate.show_sql e hibernate.format_sql) e verifique a clausula where comando de update.
2. Você está usando um objeto para representar pk composta e esqueceu de sobreescrever os métodos equals e hashCode.
3. Você está esquecendo de abrir / comitar transações e fechar sua Session (ou EntityManager no caso de JPA). Veja aqui: http://www.coderanch.com/t/216734/ORM/java/Hibernate-Batch-update-returned-unexpected.

Tente debugar esses três cenários e se precisar de mais ajuda poste os pedaços relevantes do código para gente (mapeamento das pks e código que manipula a sessão).

Abraços.
Responder

07/12/2011

Anthony Accioly

Esqueci de outro cenário popular:

4. Veja se os parâmetros do ID estão preenchidos corretamente no objeto antes do update. (Imprima os valores do ID na tela antes de executar o update, ou monitore as variáveis de ID através de um debugador).
Responder

07/12/2011

Davi Costa

Acontece muito tb ao tentar atualizar (update), um objeto que não foi salvo. Ou vc está dando um update sem nunca ter dado insert ou vc está tentando atualizar um objeto transiente, que não foi consultado do banco.

att Davi
Responder

15/12/2011

Lucas Costa

Saudações meus caros!!
Meu caro Davi Gomes, o objeto esta sendo persistido no banco, imprimi o valor dele para ter certeza disso, neste caso ele de fato nao é transiente. Tentarei as dicas 1,2 e 3 do mestre Anthony Accioly e vamo ve oque consigo. Obrigado pela colaboração !!
Att
Lucas
Responder

15/12/2011

Lucas Costa

Meus caros, problema resolvido e obrigado pela contribuição. O problema era mais simples que parceria, eu simplesmente por falta de atenção estava dando um new no objeto antes de atualizar, erro primário não acham?
Abraco.
Responder

15/12/2011

Robson Teixeira

acontece XD
e parabens por ter contado a solução e não esqueça de fechar o chamado ok?
Responder

16/12/2011

Lucas Costa

Bem, nao sei como fechar chamado meu caro, preciso da sua orientação.
Responder

16/12/2011

Anthony Accioly

Bem, nao sei como fechar chamado meu caro, preciso da sua orientação.


Após uma resposta qualquer (como essa minha) aparece a opção para fechar.

Abraços,
Responder

17/12/2011

Lucas Costa

Desculpe mais nao vi a opcao -fechar- onde deveria aparecer? devo ir no meu dev space ou no meu perfil?
Responder

20/12/2011

Dyego Carmo

Opa !

Resolvido ? Se sim , poderia fechar o chamado ?


Valeu !
Responder

20/12/2011

Lucas Costa

NAO ENCONTREI NENHUMA OPCAO FECHAR, ONDE ESTA ISSO PELO AMOR DE DEUS !!!
Responder

09/01/2012

Dyego Carmo

Está do ladinho do status , porem vc deve estar logado para tal :)
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar