Erro ao tentar Fechar Venda: detached entity passed to persist[RESOLVIDO]

13 respostas
D

Bem galera, estou com um erro estranho. No momento que tento Persistir minha venda recebo esse erro, com referência a Classe Usuário:

Erro Permissão Fecha NF: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.duxsolutions.model.Usuario
Porém, a única coisa que faço com o Usuário aqui nesse ponto é seta-lo na Saída para monitorar quem efetuou a venda ...

[code]AtualizaMovimento am = new AtualizaMovimento();
getSaida().setMovimentos(am.atualiza(saida));

EstoqueRepository er = new EstoqueRepository(getEntityManager());
er.atualizaSaida(getDadosVenda(), getUsuarioSessao());

getSaida().setContasaReceber(getContasaReceber());
				
SaidaRepository sr = new SaidaRepository(getEntityManager());

getSaida().setSituacao("F");
saida.setDataFechamento(new Date());
saida.setHoraFechamento(new Date());
saida.setUsuarioFechamento(getUsuarioSessao());

sr.salvar(saida);
Classe Saida
public class Saida implements Serializable {
        @ManyToOne
	@JoinColumn(name="usuarioFechamento")
	private Usuario usuarioFechamento;
Classe Usuário
public class Usuario implements Serializable{

	private static final long serialVersionUID = 5465615454325030138L;
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private Integer   id;
	private String nome;
	private String usuario;
	private String senha;
	private String situacao;
	private boolean logado;
	private String theme;
	
	/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
	//						MONITORAMENTO
	/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
	
	@Temporal(TemporalType.DATE)
	private Date ultimoAcesso;
	@Temporal(TemporalType.TIME)
	private Date horaUltimoAcesso;
	@Temporal(TemporalType.DATE)
	private Date data_Cadastro;
	@Temporal(TemporalType.TIME)
	private Date hora_Cadastro;
	@Temporal(TemporalType.DATE)
	private Date data_Alteracao;
	@Temporal(TemporalType.TIME)
	private Date hora_Alteracao;
	
	/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
	//				RELACIONAMENTOS MANY TO ONE
	/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
	
	@ManyToOne
	@JoinColumn(name="grupoUsuario")
	private GrupoUsuario grupoUsuario;
	
	/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
	//				RELACIONAMENTOS ONE TO ONE
	/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
	
	@OneToOne
	@JoinColumn(name="funcionario")
	private Funcionario funcionario;
E todo o Erro:
Erro Permissão Fecha NF: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.duxsolutions.model.UsuarioNov 27, 2013 5:11:37 PM com.sun.faces.application.view.FaceletViewHandlingStrategy handleRenderException
Grave: Error Rendering View[/pages/saida/venda.xhtml]
javax.el.ELException: /pages/saida/venda.xhtml @601,47 value="#{vendaPlanosBean.saidas}": Error reading 'saidas' on type br.com.duxsolutions.bean.VendaPlanosBean
	at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:114)
	at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
	at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
	at javax.faces.component.UIData.getValue(UIData.java:731)
	at org.primefaces.component.datatable.DataTable.getValue(DataTable.java:867)
	at org.primefaces.component.api.UIData.getDataModel(UIData.java:579)
	at javax.faces.component.UIData.getRowCount(UIData.java:356)
	at org.primefaces.component.api.UIData.calculateFirst(UIData.java:157)
	at org.primefaces.component.datatable.DataTableRenderer.encodeMarkup(DataTableRenderer.java:176)
	at org.primefaces.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:82)
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1763)
	at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
	at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:59)
	at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:47)
	at org.primefaces.component.dialog.DialogRenderer.encodeContent(DialogRenderer.java:172)
	at org.primefaces.component.dialog.DialogRenderer.encodeMarkup(DialogRenderer.java:101)
	at org.primefaces.component.dialog.DialogRenderer.encodeEnd(DialogRenderer.java:43)
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1763)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)
	at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:401)
	at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at br.com.duxsolutions.filter.ControleFiltro.doFilter(ControleFiltro.java:33)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
Caused by: javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.duxsolutions.model.Usuario
	at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1179)
	at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1112)
	at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:245)
	at br.com.duxsolutions.repository.SaidaRepository.saidaAll(SaidaRepository.java:39)
	at br.com.duxsolutions.bean.VendaPlanosBean.getSaidas(VendaPlanosBean.java:1603)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at javax.el.BeanELResolver.getValue(BeanELResolver.java:87)
	at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
	at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
	at org.apache.el.parser.AstValue.getValue(AstValue.java:183)
	at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:185)
	at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
	... 50 more
Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.duxsolutions.model.Usuario
	at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:127)
	at org.hibernate.impl.SessionImpl.firePersistOnFlush(SessionImpl.java:826)
	at org.hibernate.impl.SessionImpl.persistOnFlush(SessionImpl.java:818)
	at org.hibernate.engine.CascadingAction$9.cascade(CascadingAction.java:357)
	at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:392)
	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:335)
	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204)
	at org.hibernate.engine.Cascade.cascade(Cascade.java:161)
	at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:451)
	at org.hibernate.event.def.DefaultPersistEventListener.entityIsPersistent(DefaultPersistEventListener.java:158)
	at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:132)
	at org.hibernate.impl.SessionImpl.firePersistOnFlush(SessionImpl.java:826)
	at org.hibernate.impl.SessionImpl.persistOnFlush(SessionImpl.java:818)
	at org.hibernate.engine.CascadingAction$9.cascade(CascadingAction.java:357)
	at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:392)
	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:335)
	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204)
	at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:425)
	at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:362)
	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:338)
	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204)
	at org.hibernate.engine.Cascade.cascade(Cascade.java:161)
	at org.hibernate.event.def.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:154)
	at org.hibernate.event.def.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:145)
	at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:88)
	at org.hibernate.event.def.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:58)
	at org.hibernate.impl.SessionImpl.autoFlushIfRequired(SessionImpl.java:1175)
	at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1251)
	at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
	at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:236)
	... 62 more

13 Respostas

H

Aqui explica o erro e mostra o que fazer: http://uaihebert.com/jpa-mini-livro-primeiros-passos-e-conceitos-detalhados/23/

D

Hebert … Se o problema é que o Usuário esta “detached”, se eu mapear dessa forma minha classe Saida:

@ManyToOne(cascade=CascadeType.PERSIST) @JoinColumn(name="usuarioFechamento") private Usuario usuarioFechamento;

Estarei dizendo que o Usuário precisa ser persistido junto a Saída ? Iria causar a Inserção de Mais um Usuário ??

Obrigado …

H

Diego Adriano:
Hebert … Se o problema é que o Usuário esta “detached”, se eu mapear dessa forma minha classe Saida:

@ManyToOne(cascade=CascadeType.PERSIST) @JoinColumn(name="usuarioFechamento") private Usuario usuarioFechamento;

Estarei dizendo que o Usuário precisa ser persistido junto a Saída ? Iria causar a Inserção de Mais um Usuário ??

Obrigado …

Lá no post explica o que acontece. Se esse cara é um cara novo, ele também será persistido. Se esse cara já existe no DB o cascade não ajudará, você precisa deixá-lo attached antes de relacioná-los.

D

Sim, explica sim … Apenas fiquei com essa duvida …
Aliás … Otimo livro … Parabéns !!

H

Diego Adriano:
Sim, explica sim … Apenas fiquei com essa duvida …
Aliás … Otimo livro … Parabéns !!
Valeu. [=

D

Bem … fiz da seguinte forma a inserção do Usuário na venda …

Agora esta com erro em outro ponto …
Mas nada haver com isso aqui !!

Obrigado Hebbert

Abraços …

D

Voltei a ter o mesmo erro !!!
Mas o código continua o mesmo !!

D
Pois bem, fiz o seguinte teste:
System.out.println("Usuario A: "+getEntityManager().contains(saida.getUsuarioFechamento()));
				
saida.setUsuarioFechamento(ur.usuarioPorId(getEntityManager().getReference(Usuario.class, getUsuarioSessao().getId())));
				
System.out.println("Usuario D: "+getEntityManager().contains(saida.getUsuarioFechamento()));
E tive o seguinte resultado:
Usuario A: false
Usuario D: true
Ele mudou o Estado do Objeto, agora pq continua com o mesmo erro ?
Erro Permissão Fecha NF: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.duxsolutions.model.Usuario
M

Meu caro amigo !

O que vc pretende fazer com isso ???

Talvez podemos fazer outro caminho :smiley:

D

Opa … Bem, estou desenvolvendo a Rotina de venda, então para monitoramento quero saber qual Usuário efetuou a venda … Por isso pego o Usuário da Sessão e ligo ele a venda:

Estranho, pois na Entrada acontece o mesmo e funciona normalmente !

M

Copia a Entrada , Cola e substitui as palavras Entradas para Saidas … rsrs"

Ultilizando o atalho Cntrl + F …

D

Opa … vlw …rs

D

Bem galera … Obrigado novamente pela atenção …
Realmente o problema era que haviam “Usuários” dettacheds …
Pois bem, analisando toda a estrutura lembrei que minha lista de Contas a Receber tb recebia um Usuario, batata, testei e estava attached, mudei o estado e fiz o mesmo com a lista de Movimentação do Estoque e funcionou …

Obrigado !!!

Criado 27 de novembro de 2013
Ultima resposta 28 de nov. de 2013
Respostas 13
Participantes 3