[Hibernate] Erro ao persistir objeto no banco

Ola pessoal, estou com um problema ao tentar persistir um objeto no meu banco de dados.

Minhas relações são @OneToMany Unidirecionais, disseram a mim para substituir o LAZY para EAGER, porém continuou com o mesmo erro, creio que o erro esta no modo do relacionamento, mas não sei o motivo disso se eu estou APENAS linkando objetos em:

projetMediator.setProjet(projet); projetMediator.setTaches(taches); projetMediator.setActivites(activites); projetMediator.setPhases(phases);
e depois os criando o objeto ProjetMediator.

Segue o stacktracerdo erro:

javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: com.test.ems2.model.Activite at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1387) at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1310) at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1316) at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:881) at com.test.ems2.dao.GenericDAO.save(GenericDAO.java:64) at com.test.ems2.dao.ProjetMediatorDAO.save(ProjetMediatorDAO.java:1) at com.test.ems2.facade.ProjetMediatorFacade.createProjetMediator(ProjetMediatorFacade.java:20) at com.test.ems2.mb.ProjetMediatorMB.createProjetMediator(ProjetMediatorMB.java:315) 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 org.apache.el.parser.AstValue.invoke(AstValue.java:262) at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278) at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87) at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:101) at javax.faces.component.UICommand.broadcast(UICommand.java:315) at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:786) at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1251) at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at com.test.ems2.filter.AdminPagesFilter.doFilter(AdminPagesFilter.java:31) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at com.test.ems2.filter.LoginCheckFilter.doFilter(LoginCheckFilter.java:69) 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:240) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302) 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: org.hibernate.PersistentObjectException: detached entity passed to persist: com.test.ems2.model.Activite at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:141) at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:834) at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:827) at org.hibernate.engine.spi.EJB3CascadingAction$1.cascade(EJB3CascadingAction.java:52) at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:387) at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:330) at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208) at org.hibernate.engine.internal.Cascade.cascadeCollectionElements(Cascade.java:416) at org.hibernate.engine.internal.Cascade.cascadeCollection(Cascade.java:357) at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:333) at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208) at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:165) at org.hibernate.event.internal.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:449) at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:292) at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:192) at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:125) at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:78) at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:208) at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:151) at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:78) at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:843) at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:818) at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:822) at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:875) ... 42 more

Método createProjetMediator da minha classe ProjetMediatorMB.java (Scope: ViewScope) :

[code]public void createProjetMediator() {
try {
activites = getActivites();
activitiesDual = pickListActivites();
activites = activitiesDual.getTarget();

		tachesDual = pickListTaches();
		taches = getTaches();
		taches = tachesDual.getTarget();
		
		projetFacade = getProjetFacade();
		
		projet.setStatusProjet(true); //project activate
		projet.setTaches(taches);
		
		projetFacade.updateProjet(projet);
			
		projetMediator = getProjetMediator();
		
		projetMediator.setProjet(projet);
		projetMediator.setTaches(taches);
		projetMediator.setActivites(activites);
		projetMediator.setPhases(phases);
		
		getProjetMediatorFacade().createProjetMediator(projetMediator); //linha do erro

		closeDialog();
		displayInfoMessageToUser("Created With Sucess");
		loadProjetMediators();
		resetProjetMediator();
	} catch (Exception e) {
		keepDialogOpen();
		displayErrorMessageToUser("Ops, we could not create. Try again later");
		e.printStackTrace();
	}
}[/code]

O ProjetMediator.java:

[code]public class ProjetMediator implements Serializable {
private static final long serialVersionUID = 1L;

public static final String FIND_PROJECT_BY_ID_PROJECTMEDIATOR = "ProjetMediator.findProjetByIdProjetMediator";

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;

@OneToOne
    @JoinColumn(name="id_projet")
private Projet projet;


@OneToMany( targetEntity=Tache.class, fetch=FetchType.LAZY, cascade=CascadeType.ALL )
private List<Tache> taches;

@OneToMany( targetEntity=Tache.class, fetch=FetchType.LAZY, cascade=CascadeType.ALL )
private List<Activite> activites;

@OneToMany( targetEntity=Tache.class, fetch=FetchType.LAZY, cascade=CascadeType.ALL )
private List<Phase> phases;[/code]

Muito obrigado pela ajuda.

Veja o erro:

Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: com.test.ems2.model.Activite

Em:
projetMediator.setActivites(activites);

Vc está passando um objeto q está detached.
Ele não está em estado gerenciado pelo JPA.

Pesquise sobre detached q vc entenderá o pq isso acontece.

Pra adiantar seu lado:

“Detached ? uma instância desanexada é um objeto que foi persistido, mas sua Session foi fechada. A referência ao objeto continua válida, é claro, e a instância desanexada pode ser acoplada a uma nova Session no futuro, tornando-o novamente persistente (e todas as modificações sofridas). Essa característica habilita um modelo de programação para unidades de trabalho de longa execução, que requeira um tempo de espera do usuário. Podemos chamá-las de transações da aplicação, ou seja, uma unidade de trabalho do ponto de vista do usuário.”

fdiaz2011,

Removi a opção cascade=CascadeType.ALL e agora o sistema esta funcionando bem, sem problemas.

Obrigado pela explicação.