Problemas com save the transient instance before flushing:

Boa tarde !
Estou tendo problemas com mapeamento, Não estou conseguindo salvar dados de um formulário de cadastro de peças com relacionamento em uma tabela de fornecedores.

sou novato em java
segue abaixo o erro, se alguém puder me ajudar, eu agradeço.

16:40:40,757 ERROR [STDERR] java.lang.IllegalStateException: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: modelo.Fornecedores
16:40:40,758 ERROR [STDERR] at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:626)
16:40:40,758 ERROR [STDERR] at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:236)
16:40:40,758 ERROR [STDERR] at dao.PecasDAO.salvar(PecasDAO.java:29)
16:40:40,758 ERROR [STDERR] at controlador.PecasMB.salvarPecas(PecasMB.java:69)
16:40:40,758 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
16:40:40,758 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
16:40:40,758 ERROR [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
16:40:40,758 ERROR [STDERR] at java.lang.reflect.Method.invoke(Unknown Source)
16:40:40,758 ERROR [STDERR] at org.apache.el.parser.AstValue.invoke(AstValue.java:131)
16:40:40,758 ERROR [STDERR] at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
16:40:40,758 ERROR [STDERR] at com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68)
16:40:40,758 ERROR [STDERR] at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
16:40:40,758 ERROR [STDERR] at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
16:40:40,759 ERROR [STDERR] at javax.faces.component.UICommand.broadcast(UICommand.java:387)
16:40:40,759 ERROR [STDERR] at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:321)
16:40:40,759 ERROR [STDERR] at org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:296)
16:40:40,759 ERROR [STDERR] at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:253)
16:40:40,759 ERROR [STDERR] at org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:466)
16:40:40,759 ERROR [STDERR] at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
16:40:40,759 ERROR [STDERR] at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
16:40:40,759 ERROR [STDERR] at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
16:40:40,759 ERROR [STDERR] at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
16:40:40,759 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
16:40:40,759 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
16:40:40,759 ERROR [STDERR] at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
16:40:40,759 ERROR [STDERR] at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
16:40:40,759 ERROR [STDERR] at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:390)
16:40:40,759 ERROR [STDERR] at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:517)
16:40:40,759 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
16:40:40,759 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
16:40:40,759 ERROR [STDERR] at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
16:40:40,759 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
16:40:40,759 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
16:40:40,759 ERROR [STDERR] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
16:40:40,759 ERROR [STDERR] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
16:40:40,759 ERROR [STDERR] at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182)
16:40:40,759 ERROR [STDERR] at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
16:40:40,760 ERROR [STDERR] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
16:40:40,760 ERROR [STDERR] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
16:40:40,760 ERROR [STDERR] at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
16:40:40,760 ERROR [STDERR] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
16:40:40,761 ERROR [STDERR] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
16:40:40,761 ERROR [STDERR] at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
16:40:40,761 ERROR [STDERR] at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
16:40:40,761 ERROR [STDERR] at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
16:40:40,761 ERROR [STDERR] at java.lang.Thread.run(Unknown Source)
16:40:40,761 ERROR [STDERR] Caused by: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: modelo.Fornecedores
16:40:40,762 ERROR [STDERR] at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:219)
16:40:40,762 ERROR [STDERR] at org.hibernate.type.EntityType.getIdentifier(EntityType.java:397)
16:40:40,762 ERROR [STDERR] at org.hibernate.type.EntityType.replace(EntityType.java:253)
16:40:40,762 ERROR [STDERR] at org.hibernate.type.AbstractType.replace(AbstractType.java:153)
16:40:40,762 ERROR [STDERR] at org.hibernate.type.TypeFactory.replace(TypeFactory.java:515)
16:40:40,762 ERROR [STDERR] at org.hibernate.event.def.DefaultMergeEventListener.copyValues(DefaultMergeEventListener.java:377)
16:40:40,762 ERROR [STDERR] at org.hibernate.event.def.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:179)
16:40:40,762 ERROR [STDERR] at org.hibernate.event.def.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:240)
16:40:40,762 ERROR [STDERR] at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:120)
16:40:40,762 ERROR [STDERR] at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:53)
16:40:40,762 ERROR [STDERR] at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:677)
16:40:40,762 ERROR [STDERR] at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:661)
16:40:40,762 ERROR [STDERR] at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:665)
16:40:40,762 ERROR [STDERR] at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:227)
16:40:40,763 ERROR [STDERR] … 44 more

Poste suas entidades, você está utilizando cascade nos seus relacionamentos ?

Peca está com um Fornecedor

Esse fornecedor tá sem valor no id…

Ou o fornecedor tem que ser null

Ou o fornecedor tem que tá com algum valor no id…

(id que eu meu refiro é o campo anotado com @Id)

E poste as classes como o Breno falou…

Se nao achar o problema

Estou usando cascade, mas não esta rolando.
Estou ennviando minhas entidades abaixo:

package modelo;

import java.io.Serializable;
import java.util.Collection;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;

@Entity
public class Fornecedores implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@Column(name = "forcod")
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private int id;

	@OneToMany(mappedBy = "fornecedores", cascade = CascadeType.ALL,  fetch = FetchType.EAGER)
	private Collection<Pecas> peca;
	
	//@OneToMany(mappedBy = "fornecedores", targetEntity=Pecas.class, cascade = CascadeType.ALL)
	//private Collection peca;

	private String fordescricao;
	private String forrua;
	private String forbairro;
	private String forfone;
	private String forfax;
	private String foremail;
	private String forsite;
	private String forcontato;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getFordescricao() {
		return fordescricao;
	}

	public void setFordescricao(String fordescricao) {
		this.fordescricao = fordescricao;
	}

	public String getForrua() {
		return forrua;
	}

	public void setForrua(String forrua) {
		this.forrua = forrua;
	}

	public String getForbairro() {
		return forbairro;
	}

	public void setForbairro(String forbairro) {
		this.forbairro = forbairro;
	}

	public String getForfone() {
		return forfone;
	}

	public void setForfone(String forfone) {
		this.forfone = forfone;
	}

	public String getForfax() {
		return forfax;
	}

	public void setForfax(String forfax) {
		this.forfax = forfax;
	}

	public String getForemail() {
		return foremail;
	}

	public void setForemail(String foremail) {
		this.foremail = foremail;
	}

	public String getForsite() {
		return forsite;
	}

	public void setForsite(String forsite) {
		this.forsite = forsite;
	}

	public String getForcontato() {
		return forcontato;
	}

	public void setForcontato(String forcontato) {
		this.forcontato = forcontato;
	}

	public static long getSerialVersionUID() {
		return serialVersionUID;
	}
}

[code]package modelo;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

@Entity
public class Pecas {

@Id
@Column(name = "peccod")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String pecdescricao;

@ManyToOne
@JoinColumn(name = "forcod")
private Fornecedores fornecedores;

private String pectipo;

public int getId() {
	return id;
}

public void setId(int id) {
	this.id = id;
}

public Fornecedores getFornecedores() {
	return fornecedores;
}

public void setFornecedores(Fornecedores fornecedores) {
	this.fornecedores = fornecedores;
}

public String getPecdescricao() {
	return pecdescricao;
}

public void setPecdescricao(String pecdescricao) {
	this.pecdescricao = pecdescricao;
}

public String getPectipo() {
	return pectipo;
}

public void setPectipo(String pectipo) {
	this.pectipo = pectipo;
}

}
[/code]

[code]package dao;

import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import modelo.Fornecedores;

public class FornecedoresDAO {
private static FornecedoresDAO instance = new FornecedoresDAO();

private FornecedoresDAO() {

}

public static FornecedoresDAO getInstance() {
	return instance;
}

@SuppressWarnings("unchecked")
public List<Fornecedores> getAll() {
	EntityManager em = PersistenceUtil.getEntityManager();
	Query query = em.createQuery("from Fornecedores as o");
	List<Fornecedores> fornecedor = (List<Fornecedores>) query
			.getResultList();
	PersistenceUtil.close(em);
	return fornecedor;
}

public Fornecedores getByPrimaryKey(Integer forcod) {
	EntityManager em = null;
	try {
		em = PersistenceUtil.getEntityManager();
		Fornecedores f = em.find(Fornecedores.class, forcod);
		return f;
	} catch (Exception e) {
		e.printStackTrace();
	} finally {
		PersistenceUtil.close(em);
	}
	return null;
}

public void salvar(Fornecedores fornecedores) {
	EntityManager em = null;
	try {
		em = PersistenceUtil.getEntityManager();
		em.getTransaction().begin();
		if (fornecedores.getId()== 0) {
			em.persist(fornecedores);
		} else {
			fornecedores = em.merge(fornecedores);
		}
		em.getTransaction().commit();
	} catch (Exception e) {
		e.printStackTrace();
		em.getTransaction().rollback();
	} finally {
		PersistenceUtil.close(em);
	}
}

public void excluir(Fornecedores fornecedores) {
	EntityManager em = null;
	try {
		em = PersistenceUtil.getEntityManager();
		em.getTransaction().begin();
		fornecedores = em.merge(fornecedores);
		em.remove(fornecedores);
		em.getTransaction().commit();
	} catch (Exception e) {
		e.printStackTrace();
		em.getTransaction().rollback();
	} finally {
		PersistenceUtil.close(em);
	}
}

}
[/code]

[code]package dao;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import modelo.Pecas;

public class PecasDAO {
private static PecasDAO instance = new PecasDAO();

private PecasDAO() {

}

public static PecasDAO getInstance() {
	return instance;
}

public void salvar(Pecas pecas) {
	EntityManager em = null;
	try {
		em = PersistenceUtil.getEntityManager();
		em.getTransaction().begin();
		if (pecas.getId() == 0) {
			em.persist(pecas);
		} else {
			pecas = em.merge(pecas);
		}
		em.getTransaction().commit();
	} catch (Exception e) {
		e.printStackTrace();
		em.getTransaction().rollback();
	} finally {
		PersistenceUtil.close(em);
	}
}

@SuppressWarnings("unchecked")
public List<Pecas> getAll() {
	EntityManager em = PersistenceUtil.getEntityManager();
	Query query = em.createQuery("from Pecas");
	List<Pecas> pecas = (List<Pecas>) query.getResultList();
	PersistenceUtil.close(em);
	return pecas;
}



public Pecas getByPrimaryKey(Integer peccod) {
	EntityManager em = null;
	try {
		em = PersistenceUtil.getEntityManager();
		Pecas p = em.find(Pecas.class, peccod);
		return p;
	} catch (Exception e) {
		e.printStackTrace();
	} finally {
		PersistenceUtil.close(em);
	}
	return null;
}

public void excluir(Pecas pecas) {
	EntityManager em = null;
	try {
		em = PersistenceUtil.getEntityManager();
		em.getTransaction().begin();
		pecas = em.merge(pecas);
		em.remove(pecas);
		em.getTransaction().commit();
	} catch (Exception e) {
		e.printStackTrace();
		em.getTransaction().rollback();
	} finally {
		PersistenceUtil.close(em);
	}
}

}
[/code]

Entao é isso mesmo que falei

Pecas tem Fornecedor

E ao salvar pecas fornecedor tá sem valor no campo id

Dicas:
[list]No campo id use Integer ao invés de int[/list]
[list]Use nome das entidades no singular… ao invés de Fornecedores use Fornecedor… pois um objeto dessa classe representa apenas 1 fornecedor…[/list]

Outra dica… formate seu código com as tags [code]

blz, vou dar uma olhada nisso ja, assim se der algum problema, ja falo de novo.

Obrigado

Este campo que vc falou para eu trocar, é o da entidade Fornecedores.

trocar o private int id para private Integer id.
Correto ?
Se for esta alteração, deu o mesmo erro.
Tenho certeza que estou fazendo besteira, mas como sou novato, fica mais complicado.