Erro ao inserir usando JPA + Hibernate

5 views
Skip to first unread message

Sávio Canuto

unread,
Nov 24, 2009, 2:48:15 PM11/24/09
to PBJug
Olá Pessoal,

Analisem a seguinte situação:

Tenho uma GuiaConsulta onde a mesma possui mais dois objetos: Paciente e Médico (Figura 1)

?ui=2&view=att&th=12527a0b18930209&attid=0.1&disp=attd&realattid=ii_12527a0b18930209&zw
                                                  Figura 1


Tanto o paciente como o médico possuem um atributo: listaDeGuias.

O problema é: Na hora que tento salvar uma guia aparece o seguinte erro:

13:29:42,240| ERROR | root | 41 - org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.paciente.Paciente
javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.paciente.Paciente
at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:630)
at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:219)
at br.com.digivox.voxpersistence.dao.DAOGenerico.salvaValidate(DAOGenerico.java:321)
at br.com.guiatiss.GuiaConsultaManager.salvar(GuiaConsultaManager.java:81)
at br.com.ioip.service.guiatiss.GuiaConsultaService.salvar(GuiaConsultaService.java:51)
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 flex.messaging.services.remoting.adapters.JavaAdapter.invoke(JavaAdapter.java:421)
at flex.messaging.services.RemotingService.serviceMessage(RemotingService.java:183)
at flex.messaging.MessageBroker.routeMessageToService(MessageBroker.java:1503)
at flex.messaging.endpoints.AbstractEndpoint.serviceMessage(AbstractEndpoint.java:884)
at flex.messaging.endpoints.amf.MessageBrokerFilter.invoke(MessageBrokerFilter.java:121)
at flex.messaging.endpoints.amf.LegacyFilter.invoke(LegacyFilter.java:158)
at flex.messaging.endpoints.amf.SessionFilter.invoke(SessionFilter.java:44)
at flex.messaging.endpoints.amf.BatchProcessFilter.invoke(BatchProcessFilter.java:67)
at flex.messaging.endpoints.amf.SerializationFilter.invoke(SerializationFilter.java:146)
at flex.messaging.endpoints.BaseHTTPEndpoint.service(BaseHTTPEndpoint.java:278)
at flex.messaging.MessageBrokerServlet.service(MessageBrokerServlet.java:322)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at br.com.digivox.voxpersistence.util.OpenSessionView.doFilter(OpenSessionView.java:25)
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:128)
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:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Thread.java:619)

Classes:

public class GuiaConsulta {

private static final long serialVersionUID = -194265369460204836L;

@ManyToOne(cascade={CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}) // Já tentei somente o CascadeType.ALL e não deu certo
@JoinColumn(name="medico_id")
private Medico contratado;
@ManyToOne(cascade={CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}) // Já tentei somente o CascadeType.ALL e não deu certo
@JoinColumn(name="paciente_id")
private Paciente beneficiario;
        ....
}

Paciente e Medico {

         ....
        @OneToMany(mappedBy="beneficiario ou contratado")
private List<GuiaConsulta> listaGuiaConsulta;
        .....

}

Alguma solução para esse problema?


--
Atenciosamente,

Sávio Canuto de Oliveira Sousa
Analista / Programador
Bacharel em Sistemas de Informação
João Pessoa - Paraíba - Brasil
------------------------------------------------------
Skype - savio.canuto
MSN - savio...@hotmail.com

problema jpa.jpg

Sávio Canuto

unread,
Nov 24, 2009, 3:11:19 PM11/24/09
to PBJug

Só uma coisa a acrescentar... O Médico e o Paciente já existem na minha base.



2009/11/24 Sávio Canuto <savio...@gmail.com>
problema jpa.jpg

Rafael Trindade Chiappetta

unread,
Nov 24, 2009, 3:23:29 PM11/24/09
to pb...@googlegroups.com
Uma guia de consulta não seria um relacionamento @ManyToMany enrtre Medico e Paciente?

=====
Rafael Trindade Chiappetta



2009/11/24 Sávio Canuto <savio...@gmail.com>

Sávio Canuto

unread,
Nov 24, 2009, 3:38:15 PM11/24/09
to pb...@googlegroups.com
Não. A guia só pode ser de um médico e de um paciente, como um médico pode estar em várias guais (paciente tb).


2009/11/24 Rafael Trindade Chiappetta <rafae...@gmail.com>

Rafael Trindade Chiappetta

unread,
Nov 24, 2009, 3:47:56 PM11/24/09
to pb...@googlegroups.com
É exatamente o que eu falei.
Dá uma olhada nesse tutorial aqui.
Não é exatamente a mesma situação, mas pode te dar uma luz!

Rafael Lossurdo

unread,
Nov 24, 2009, 3:51:54 PM11/24/09
to pb...@googlegroups.com
Caro Sávio,

Vou te dar uma dica que geralmente dou pra muita gente: quando a situação "enrosca" no mapeamento objeto-relacional, não perde teu tempo, usa o Netbeans 6.7 pra conectar no banco, extrair as tabelas em questão (class entity from database, se não me engano)... e depois, aprende o porquê não estava funcionando, e o que tu havia feito de errado. Em 99% das vezes, funciona... e a gente vai aprendendo! ;-)

Att,
Rafael Lossurdo
loss...@gmail.com
http://lossurdojava.blogspot.com
RSS: http://feeds2.feedburner.com/BlogEntusiastaEmJava

"You have to know the past to understand the present", Carl Sagan

Ánderson Bonavides

unread,
Nov 30, 2009, 6:24:50 AM11/30/09
to pb...@googlegroups.com
Posta neste grupo, não tem muitos participantes mas acho que vai pode acabar ajuando: hibernat...@googlegroups.com

2009/11/24 Rafael Lossurdo <loss...@gmail.com>



--
              Ánderson Matos Bonavides        
      Bacharel em Ciência da Computação  
   SCJP - Sun Certified Java Programmer 5.0
Reply all
Reply to author
Forward
0 new messages