Object references an unsaved transient instance - save the transient instance before flushing

boa tarde

object references an unsaved transient instance - save the transient instance before flushing

estou tentando alterar um registro onde um dos campos é nulo e faz referencia com uma tabela pai.

o que pode ser?

obrigado

segue log do erro

14:08:58,199 INFO  [stdout] (http--127.0.0.1-8080-1) ------------------------ VOEXCEPTION ------------------------

14:08:58,200 INFO  [stdout] (http--127.0.0.1-8080-1) org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: br.com.vo.entity.VoClassificacaoCombustivel.voMaterialAditivo -> br.com.vo.sup.mt.entity.VoMaterial

14:08:58,200 INFO  [stdout] (http--127.0.0.1-8080-1) /aut/ma/voClassificacaoCombustivel.jsf

14:08:58,200 INFO  [stdout] (http--127.0.0.1-8080-1) -------------------------------------------------------------

14:08:58,202 ERROR [stderr] (http--127.0.0.1-8080-1) br.com.vo.exception.VoException: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: br.com.vo.entity.VoClassificacaoCombustivel.voMaterialAditivo -> br.com.vo.sup.mt.entity.VoMaterial

14:08:58,202 ERROR [stderr] (http--127.0.0.1-8080-1) 	at br.com.vo.db.VoEJB.alterar(VoEJB.java:107)

Da a entender que o erro acontece quando tu tenta persistir um dos objetos que compoe o VO não possui ID ou seja, não ainda não foi presistido no banco de dados.
Dependendo de como esta mapeado na entidade, tu precisara antes salvar o objeto filho para depois salvar o pai.

1 curtida

Esse poste te ajudará a entender o erro: http://uaihebert.com/jpa-mini-livro-primeiros-passos-e-conceitos-detalhados/23/

1 curtida

falaei, galera. blz!?

estou com um problema acho eu que similar. espero que possam me dar um help. uso EJB, JBOSS 4.1 e Struts 1

no meu caso eu tenho uma prova.listaQuestoes(), questao.listaResposta() … sendo assim, segue a sequencia que estou fazendo para cadastrar:

  1. eu passo a minha prova para o meu ProvaFacadeBean.cadastrar();
  2. cadastro a prova e itero a listaQuestao chamando QuestaoFacadeBean passando uma única questão;
  3. cadastro a questão e itero a listaRespostas para cadastrá-las;

acho estranho que, se a primeira resposta bater na validação (lanço uma Exception) o fluxo segue retornando normalmente para minha Action para eu apresentar o problema ao usuário, porém, se for a “última” resposta ele me dá um erro de transação:


java.lang.RuntimeException: org.jboss.tm.JBossRollbackException: Unable to commit, tx=TransactionImpl:XidImpl[FormatId=257, GlobalId=xxxxxx/56, BranchQual=, localId=56] status=STATUS_NO_TRANSACTION; - nested throwable: (java.lang.IllegalStateException: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: br.entidade.Resposta.questao -> br.entidade.Questao)