Hibernate [BUG?] AssertionFailure: null id in entry  XML
Índice dos Fóruns » Ferramentas, Frameworks e Utilitários
Autor Mensagem
Guilherme Gomes
Virtual Machine Man
[Avatar]

Membro desde: 25/06/2007 14:32:09
Mensagens: 686
Localização: São Paulo
Offline

Pessoal,

Estou com uma aplicação WEB usando Tomcat, Hibernate, MySQL e JSF.

Em um dos objetos persistentes tenho o seguinte mapeamento:



Ao criar o registro via Browser e mandar salvar, o hibernate está gerando o seguinte erro:


org.hibernate.AssertionFailure: null id in MinhaClasse entry (don't flush the Session after an exception occurs)
at org.hibernate.event.def.DefaultFlushEntityEventListener.checkId(DefaultFlushEntityEventListener.java:55)
at org.hibernate.event.def.DefaultFlushEntityEventListener.getValues(DefaultFlushEntityEventListener.java:164)
at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:120)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:196)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:76)
at org.hibernate.event.def.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:35)
at org.hibernate.impl.SessionImpl.autoFlushIfRequired(SessionImpl.java:969)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1114)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)


Olhando o erro, é lógico que o ID está nulo, eu quero inserir um registro no banco de dados, numa tabela com primary key auto_increment. Ou seja, quero que o banco retorne o valor, por isso ele entra como nulo.

Fora esse campo, a tabela possui vários outros campos e um deles é unique, tanto no banco como no mapeamento do hibernate.

Alguém pode oferecer uma luz?

Obrigado...

This message was edited 1 time. Last update was at 06/08/2008 10:11:53


-----------
Atenciosamente,
Guilherme V. F. Gomes.
[WWW] [Yahoo!] aim icon [MSN] [ICQ]
Guilherme Gomes
Virtual Machine Man
[Avatar]

Membro desde: 25/06/2007 14:32:09
Mensagens: 686
Localização: São Paulo
Offline

O método checkID() onde está lançando a exception:



Caso isso ajude.

-----------
Atenciosamente,
Guilherme V. F. Gomes.
[WWW] [Yahoo!] aim icon [MSN] [ICQ]
victorwss
JWizard
[Avatar]

Membro desde: 18/12/2007 14:46:00
Mensagens: 2409
Localização: São Paulo - SP
Offline

Guilherme Gomes wrote:O método checkID() onde está lançando a exception:



Caso isso ajude.


Bem, se é bug ou não eu não sei, mas é no mínimo uma aplicação incorreta do conceito de assertivas. Um método público não deve validar parâmetros com assertivas.

Victor Williams Stafusa da Silva

Bacharel em Ciência da Computação - UFMT // Especialista em Desenvolvimento Java - CEFET/MT // Doutorando em Ciência da Computação - IME-USP
SCJP 6.0 - 19/12/2007 - PASS - 88% // SCWCD 5 - 17/05/2008 - PASS - 79% // SCJA - 09/09/2008 - PASS - 96% // SCSNI - 30/06/2009 - PASS - 68% // SCBCD 5 - 31/05/2010 - PASS - 95%
Próximos: SCJD (encalhado com o projeto), SCEA parte I (estudando). Algum dia desses: SCMAD, OCA, SCEA e SCDJWS.

Computação: uma ciência holística e esotérica!
E então veio Deus a terra e disse aos homens: Não dividireis por zero.
XML is a giant step in no direction at all. (Erik Naggum)
Arquitetura de sistemas: Eu prefiro ser essa metamorfose ambulante do que ter aquela velha opinião formada sobre tudo.
Diga não as drogas: Não use java.util.Vector.
Cuidado: Este usuário pode ter temperamento agressivo.

Always code as if the person who will maintain your code is a maniac serial killer that knows where you live.
I am the maniac serial killer that knows where you live who will maintain your code.


É impossível falar de CMMI (Capability Maturity Model Integration) sem saber o que é CIMM (Capability Im-Maturity Model).


Se você escreve "concerteza", "concerteza" você andou matando aulas de português.
[MSN]
romuloff
Java Ninja
[Avatar]

Membro desde: 02/07/2007 14:56:24
Mensagens: 254
Localização: Uberlandia - MG
Offline

victorwss wrote:
Guilherme Gomes wrote:O método checkID() onde está lançando a exception:



Caso isso ajude.


Bem, se é bug ou não eu não sei, mas é no mínimo uma aplicação incorreta do conceito de assertivas. Um método público não deve validar parâmetros com assertivas.


Vitor. esse código é do hibernate ...
org.hibernate.event.def.DefaultFlushEntityEventListener

This message was edited 1 time. Last update was at 14/07/2009 13:27:58

rick_gallagher
Thread.start()
[Avatar]

Membro desde: 18/09/2006 12:21:30
Mensagens: 36
Localização: Manaus-AM
Offline

Eu to passando pelo mesmo problema do Guilherme...

Se alguem souber, por favor da um help!
daniel.joppi
Entusiasta Java
[Avatar]

Membro desde: 31/03/2011 13:24:09
Mensagens: 22
Localização: Joinville-SC
Offline

como resolveram?
[MSN]
vinnysoft
JavaGuru
[Avatar]

Membro desde: 21/09/2010 00:56:24
Mensagens: 225
Localização: Vitória - Espírito Santo
Offline

daniel.joppi wrote:como resolveram?


Boa noite!

Eu já passei por essa situação. Comigo aconteceu logo após uma ConstraintViolationException do hibernate, então não conseguia fazer mais nada durante aquela sessão. Dei uma lida em alguns forums (inclusive aqui: http://www.guj.com.br/java/100669-problema-hibernate-entry-dont-flush-the-session-after-an-exception-occurs) , e disseram que o hibernate da rollback na transação e invalida as demais tentativas daquela sessão. Isso é até, de certa forma, o correto a se fazer, pois vc não tem certeza do estado do banco de dados após uma exceção, então acredito que o Hibernate proceda assim para que possa ser verificada a consistência do banco.

Como eu sei que era intencional meu erro de ConstraintViolationException, corrigi este problema simplesmente fechando e abrindo outra sessão:



Mas como disse, deve ter cuidado com essa opção.... no meu caso resolveu, mas foi por minha conta e risco!

Até +!

This message was edited 1 time. Last update was at 04/12/2011 22:47:01




daniel.joppi
Entusiasta Java
[Avatar]

Membro desde: 31/03/2011 13:24:09
Mensagens: 22
Localização: Joinville-SC
Offline

mas ai você abre a nova sessão e re-faz a transação?
[MSN]
vinnysoft
JavaGuru
[Avatar]

Membro desde: 21/09/2010 00:56:24
Mensagens: 225
Localização: Vitória - Espírito Santo
Offline

daniel.joppi wrote:mas ai você abre a nova sessão e re-faz a transação?


Boa noite!

Neste caso nao, pois esse erro de Constraint é se já existe um objeto com os mesmos dados (atributos configurados como constraint) do que o objeto na view, então simplesmente exibo uma mensagem ao usuário que o objeto já existe, que ele não pode inseri-lo novamente.

Então não há necessidade de retentar a mesma transação, mas sim que ele altere os dados da view e tente novamente.

Até +!



 
Índice dos Fóruns » Ferramentas, Frameworks e Utilitários
Ir para:   
Powered by JForum 2.1.8 © JForum Team