Erro NonUniqueObjectException

5 respostas
J

boa tarde,

quando vou dar um merge em um novo “Produto” que possui uma list de “PedidoProduto” ocorre este erro:

javax.persistence.PersistenceException: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [br.com.sistema.modelo.PedidoProduto#57]

mas isto ocorre apenas quando insiro mais de um item apenas.

obrigado.

5 Respostas

Hebert_Coelho

Deve ser pq seu PedidoProduto não está sincronizado.

Tente fazer um refresh/find nele antes de salvar.

J

jakefrog:
Deve ser pq seu PedidoProduto não está sincronizado.

Tente fazer um refresh/find nele antes de salvar.

como assim não entendi?

Hebert_Coelho
PedidoProduto pedidoProduto = produto.getPedidoProduto();

entityManager.refresh(pedidoProduto);

entityManager.persist(produto);

Eu coloquei como entityManager mas se tiver usando hibernate ou qualquer outra coisa, faça assim.

J
jakefrog:
PedidoProduto pedidoProduto = produto.getPedidoProduto();

entityManager.refresh(pedidoProduto);

entityManager.persist(produto);

Eu coloquei como entityManager mas se tiver usando hibernate ou qualquer outra coisa, faça assim.

quando faço isto da este outro erro:

java.lang.IllegalArgumentException: Entity not managed
at org.hibernate.ejb.AbstractEntityManagerImpl.refresh(AbstractEntityManagerImpl.java:268)
at br.com.quedadagua.dao.PedidoDAO.salvarPedido(PedidoDAO.java:33)
at br.com.quedadagua.managedBean.PedidoManagedBean.salvarPedido(PedidoManagedBean.java:200)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.el.parser.AstValue.invoke(AstValue.java:191)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
at com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:77)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:91)
at javax.faces.component.UICommand.broadcast(UICommand.java:383)
at org.ajax4jsf.component.AjaxActionComponent.broadcast(AjaxActionComponent.java:55)
at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:329)
at org.ajax4jsf.component.AjaxViewRoot.broadcastEventsForPhase(AjaxViewRoot.java:304)
at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:261)
at org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:474)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206)
at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:861)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1584)
at java.lang.Thread.run(Thread.java:662)

Hebert_Coelho

A entidade pedidoProduto está com todos os dados necessários?

Se sim, troque de refresh para merge.

Se não. Faça o seguintePedidoProduto pedidoProduto = produto.getPedidoProduto(); pedidoProduto = em.find(pedidoProduto.getId(), PedidoProduto.class);E veja se funciona.

Criado 23 de novembro de 2011
Ultima resposta 23 de nov. de 2011
Respostas 5
Participantes 2