org.hibernate.TransientPropertyValueException: object references an unsaved transient instance

20 views
Skip to first unread message

Romário Teles

unread,
Feb 28, 2018, 3:09:50 PM2/28/18
to ce...@googlegroups.com
Boa tarde pessoal. Estou com um velho problema bastante conhecido, mas que está me tirando do sério. org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing: br.com.sweda.persistence.entity.ComboProduto.produto -> br.com.sweda.persistence.entity.Produto.

Eu sei que este problema é decorrente de uma tentativa de referenciar um objeto que não foi persistido ainda. Mas esta exceção está dando em um momento em que eu estou tentando persistir um outro objeto que não tem nada a ver com o que está presente na exceção. Alguém sabe como evitar esse erro? O cenário é parecido com este:

Type Objeto1;
Type2 Objeto2;

entityManager.save(Objeto1); // tenta salvar o 1, mas está reclamando do objeto 2.


Atenciosamente,
Romário Teles Pires
Especializando em Engenharia de Software
Desenvolvedor de aplicações para WEB e Android
Celular: (85) 99946-4897

Erinaldo Souza

unread,
Feb 28, 2018, 3:13:37 PM2/28/18
to ce...@googlegroups.com
Vocẽ deve ter feito alguma alteração no objeto 2, dentro da transação.
Se vc usou os metodos SET do objeto 2 enquando ele estáva gerenciado pelo hibernate,
ele vai tentar fazer as alterações no banco quando comitar a transação.

Veja seu fluxo até o momento do erro.

--
-- Você está inscrito na lista de discussão técnica do CEJUG. Para sair da lista de discussão, envie um email para cejug+unsubscribe@googlegroups.com.
---
Você recebeu essa mensagem porque está inscrito no grupo "CEJUG" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para cejug+unsubscribe@googlegroups.com.
Para postar nesse grupo, envie um e-mail para ce...@googlegroups.com.
Acesse esse grupo em https://groups.google.com/group/cejug.
Para mais opções, acesse https://groups.google.com/d/optout.



--
Erinaldo Souza

Pós-graduando em Arquitetura, Design e Implementação de Sistemas Para Internet
Tecnólogo em Análise e Desenvolvimento de Sistemas
Técnico em Hardwares
Cel: (85) 9921.4972

 

Rafael Vieira Braga

unread,
Feb 28, 2018, 4:32:48 PM2/28/18
to ce...@googlegroups.com
Os objetos tem algum tipo de relacionamento? Será que n tem nenhuma operação em cascata sendo efetuada?

Ythalo Rossy

unread,
Mar 1, 2018, 12:05:41 AM3/1/18
to ce...@googlegroups.com
Romário,

br.com.sweda.persistence.entity.ComboProduto.produto -> br.com.sweda.persistence.entity.Produto.

Me parece que no momento que tenta salvar o CompoProduto a entidade Produto não está em um estado gerenciado.

Leia esse material para entender um pouco mais sobre o gerenciamento de estado das entidades:
http://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#pc

Atenciosamente,
YRoss

Ythalo Rossy Saldanha Lira
Information Technology Consultant
Inter-America Investment Corporation
Inter-America Development Bank

Thiago Silva

unread,
Mar 1, 2018, 6:44:59 AM3/1/18
to ce...@googlegroups.com
Romário,

Caso o objeto não tenha nada a ver com o que você está tentando salvar, é possível usar o session.evict(objeto) ou entityManager.detach(objeto) para tirá-lo da sessão. Normalmente, quando é necessário usar esses artifícios, estamos com algum problema no gerenciamento das entidades, mas pode ser uma saída já que você está saindo do sério. :)



Atenciosamente,

Thiago Silva Bezerra
Reply all
Reply to author
Forward
0 new messages