Object references an unsaved transient instance - save the transient instance before flushing

Olá,

Estou tento o seguinte cenário: Eu tenho um cadastro de candidato onde há endereco, telefone, etc.
Eu tenho uma única tabela de UF. E gostaria de usa-la 2 vzes para o memos cadastro.
Assim, um estado-uf seria para o estado que ele nasceu, e outro para onde ele mora atualmente.

O erro é este: object references an unsaved transient instance - save the transient instance before flushing

Alguém poderia me ajudar?

Obrigado[b]

Douglas Luciano

Olá.

Poste o código, ajuda muito ok? :wink:

Ola Douglas!

Eu detalhei bastante a respeito disso aqui:
http://blog.caelum.com.br/2006/11/01/transientobjectexception-lazyinitializationexception-e-outras-famosas-do-hibernate/

Tem duas solucoes: voce usar cascade, ou voce persistir todos os novos objetos separadamente. Eu, pessoalmente, dou preferencia sempre a segunda abordagem.

Este é o ERRO:
org.springframework.dao.InvalidDataAccessApiUsageException: object references an unsaved transient instance - save the transient instance before flushing: br.com.vetoreditora.psiconline.models.Uf; nested exception is org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: br.com.vetoreditora.psiconline.models.Uf
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:651)
at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:424)
at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
at org.springframework.orm.hibernate3.HibernateTemplate.merge(HibernateTemplate.java:833)
at br.com.vetoreditora.psiconline.dao.hibernate.GenericDaoHibernate.save(GenericDaoHibernate.java:174)
at br.com.vetoreditora.psiconline.service.impl.GenericManagerImpl.save(GenericManagerImpl.java:82)
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.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy23.save(Unknown Source)
at br.com.vetoreditora.psiconline.web.CandidatoServlet.doPost(CandidatoServlet.java:105)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
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 org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
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:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
Caused by: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: br.com.vetoreditora.psiconline.models.Uf
at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:219)
at org.hibernate.type.EntityType.getIdentifier(EntityType.java:397)
at org.hibernate.type.EntityType.replace(EntityType.java:253)
at org.hibernate.type.AbstractType.replace(AbstractType.java:153)
at org.hibernate.type.TypeFactory.replace(TypeFactory.java:515)
at org.hibernate.event.def.DefaultMergeEventListener.copyValues(DefaultMergeEventListener.java:377)
at org.hibernate.event.def.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:179)
at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:123)
at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:53)
at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:677)
at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:661)
at org.springframework.orm.hibernate3.HibernateTemplate$24.doInHibernate(HibernateTemplate.java:836)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:419)
… 34 more

o Codigo abaixo da classe Candidato

@Entity
@Table(name = "CANDIDATO")
@SuppressWarnings("serial")
public class Candidato implements Serializable {

	/** id do candidato */
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long id;
	
...........
	
	/** email do candidato*/
	@NotNull
	@Length(max = 75)
	@Column(name = "EMAIL")
	private String email;
	
	
	private Telefone telefone;
	
	private Endereco endereco;

	@ManyToOne(fetch=FetchType.EAGER)
	@JoinColumn(name = "idUf", insertable=false, updatable=false)
	private Uf uf;

       //Getters e Setters

Classe UF

@Entity
@Table(name = "UF")
@SuppressWarnings("serial")
public class Uf implements Serializable {

	/** id do uf */
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long id;
	
	/** estado. */
	@NotNull
	@Length(max = 50)
	@Column(name = "UF")
	private String uf;

       //Getters e Setters

Classe Endereco

@Embeddable
@Table(name = "ENDERECO")
@SuppressWarnings("serial")
public class Endereco implements Serializable {

	/** ID do endereco da empresa, psicologo e usuario */
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private long id;

..................

	/** CEP da empresa, psicologo e usuario */
	@NotNull
	@Column(name = "CEP")
	@Length(max = 9)
	private String cep;

	@ManyToOne(fetch=FetchType.EAGER)
	@JoinColumn(name = "idUf", insertable=false, updatable=false)
	private Uf uf;
 
        //Getters e Setters

Paulo,

Como eu poderia persistir todos os novos objetos separadamente?

Obrigado

poste o codigo que esta salvando o objeto que te mostro

mas nesse caso, como é um UF, voce provavelmente quer recupera-lo do banco, e nao gravar mais um estado no banco!

Vamos ressucitar o topic kkkkk

Paulo, voce pode me ajudar com este problema?

Segue o momento que estou tentando salvar e apresenta este erro:

[code]Queue qu = new Queue();

	qu.setQueueType(QueueType.valueOf(queue));
	
	assistance.setQueue(qu);

            assistanceService.save(assistance);[/code]

Esta reptornando o seguinte erro:

10/04/2010 13:11:09 org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() for servlet default threw exception org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.brightstar.crm.model.Queue at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:242) at org.hibernate.type.EntityType.getIdentifier(EntityType.java:430) at org.hibernate.type.ManyToOneType.isDirty(ManyToOneType.java:265) at org.hibernate.type.TypeFactory.findDirty(TypeFactory.java:619) at org.hibernate.persister.entity.AbstractEntityPersister.findDirty(AbstractEntityPersister.java:3151) at org.hibernate.event.def.DefaultFlushEntityEventListener.dirtyCheck(DefaultFlushEntityEventListener.java:501) at org.hibernate.event.def.DefaultFlushEntityEventListener.isUpdateNecessary(DefaultFlushEntityEventListener.java:227) at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:150) at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:219) at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:99) at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:49) at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027) at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365) at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137) at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:578) at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:662) at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:632) at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:314) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:116) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) at com.brightstar.common.aop.LoggerInterceptor.invoke(LoggerInterceptor.java:35) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:631) at com.brightstar.timrma.service.AssistanceServiceImpl$$EnhancerByCGLIB$$62706a58.save(<generated>) at com.brightstar.timrma.view.action.AtendimentoAction.saveAtendimento(AtendimentoAction.java:524) 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 com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:404) at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:267) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:229) at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:123) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at com.brightstar.common.web.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:115) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:83) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:121) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:170) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at com.brightstar.common.web.interceptor.LoggerInterceptor.intercept(LoggerInterceptor.java:31) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at com.brightstar.common.web.interceptor.AuthRolesInterceptor.intercept(AuthRolesInterceptor.java:34) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:50) at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:504) at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75) 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.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525) at org.apache.catalina.valves.CometConnectionManagerValve.invoke(CometConnectionManagerValve.java:248) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:421) 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(Unknown Source)

Classe Assistance:

[code]
@ManyToOne
@JoinColumn(name = “queue_id”)
public Queue getQueue() {
return queue;
}

public void setQueue(Queue queue) {
	this.queue = queue;
}[/code]

Me ajuda plzzzz rsrsrs valeuuu

Ola Danilo!

Voce deve estar tentando salvar/mergear esse objeto que tem relacionamento com o Queue, e o queue ja esta detached!

Aqui escrevi detalhes desse mesmo caso:
http://blog.caelum.com.br/2006/11/01/transientobjectexception-lazyinitializationexception-e-outras-famosas-do-hibernate/

[quote=Paulo Silveira]Ola Danilo!

Voce deve estar tentando salvar/mergear esse objeto que tem relacionamento com o Queue, e o queue ja esta detached!

Aqui escrevi detalhes desse mesmo caso:
http://blog.caelum.com.br/2006/11/01/transientobjectexception-lazyinitializationexception-e-outras-famosas-do-hibernate/[/quote]

Valeu Paulo!

Consegui resolver buscando o objeto “Queue” na base e add ele no objeto Assistance :slight_smile:

abraço fuiiiiiiiiiiiii

Boa tarde! Estou tendo esse problema, porém segui a dica do paulo em seu blog http://blog.caelum.com.br/transientobjectexception-lazyinitializationexception-e-outras-famosas-do-hibernate/ adicionando no relacionamento do meu bean cascade=CascadeType.PERSIST, mas de nada adiantou!!!

Eu tenho um relacionamento @OneToOne

Estou utilizando um DAO generico… passando a Classe como um Object, minha classe Principal possui anotações @OneToOne

Puxa, toda vez que vou abrir um post começo a colocar meu código e acabo fazendo ajustes e encontrando o problema, o fórum realmente me faz pensar mais antes de perguntar…:wink:

Estava com esse mesmo problema e fiz as seguintes alterações que resolveram…

//apliquei cacade aki
@OneToOne(optional=true,cascade=CascadeType.ALL)
	@JoinColumn(name = "id_frequencia", referencedColumnName = "id_frequencia", nullable = true)
	public Frequencia getFrequencia() {
		return frequencia;
	}
//apliquei cacade aki
	@Cascade(org.hibernate.annotations.CascadeType.ALL)
	public void setFrequencia(Frequencia frequencia) {
		this.frequencia = frequencia;
	}

e na hora de persistir usei salveOrSave(objeto)…

Na hora de salvar no objeto fiz assim:

@Post @Path({"/{aluno.id}/{disciplina.id}"})
	public void alteraFrequencia(Aluno aluno, Disciplina disciplina) {
		result.on(HibernateException.class).forwardTo(AlunosController.class).lista();
		
			Aluno comDisciplinasParaAlterar = dao.carrega(aluno.getId());
			
			List<Disciplina> novas = aluno.getDisciplinas();
			
			//disciplinas com frequencias novas
			for (Disciplina nova : novas) {
				//disciplinas com frequencias antigas
				for (Disciplina antiga : comDisciplinasParaAlterar.getDisciplinas()) {
					if(nova.getId().equals(antiga.getId())){
						comDisciplinasParaAlterar.getDisciplinas().remove(antiga);
						//pego a antiga disciplina e edito sua nova frequencia
						antiga.setFrequencia(nova.getFrequencia());
						comDisciplinasParaAlterar.getDisciplinas().add(antiga);
						comDisciplinasParaAlterar.setDisciplinas(comDisciplinasParaAlterar.getDisciplinas());
						break;
					}
				}
			}
			dao.salvaOrUpdate(comDisciplinasParaAlterar);		
		result.redirectTo(AlunosController.class).edita(aluno.getId());
	}

Boa tarde Galera do GUJ,

Eu estava com o mesmo problema ja algum tempo e resolvi ler um pouco, mas nao demorei a achar a solucao…

eis o erro:

org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing:

Bom apenas adicionei cascade = CascadeType.ALL,
esta config no bean e … FUNCIONOU PARCIALMENTE…

Agora esta inserindo 3 vezes a mesma instancia…puxa sei la oq fiz de errado???

:wink:

Bom vamos la…acho q estou me enrolando com a conf…
Tenho as seguinte tabelas: OPERACAO, DOCUMENTACAO, DOCUMENTACAO_OPERACAO, SIMPLIM.

OPERACAO: Esta tabela contem id, valores(iof, despesas, etc…), cliente, tipo, e mais um monte de campos…

DOCUMENTACAO: id, nome, tipo, cliente, aprovado, etc…

DOCUMENTACAO_OPERACAO: esta é uma tabela de resolucao onde cadastro o id_operacao e o id_documentacao.

SIMPLIM id, varios campos especificos, id_operacao.

[i]BEAN DOCUMENTACAO:[/i] Antes tinha imaginado que uma operacao iria ter varias documentacoes e uma documentacao poderia estar em mais de uma operacao diferente, por isso fiz o mapeamento N:N, contudo agora estou vendo que tera de ser 1:N, pois a pagina de cadastro de documentacao esta dentro da pagina de cadastro de operacao. Sendo assim cada operacao tera sua lista de documentos especificos. Terei que mudar, mas preciso ter certeza pois isso implica em varias partes do codigo.

@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	@JoinTable(name = "TB_DOCUMENTACAO_OPERACAO", 
			joinColumns = @JoinColumn(name = "ID_DOCUMENTACAO", referencedColumnName = "ID_DOCUMENTACAO"), 
			inverseJoinColumns = @JoinColumn(name = "ID_OPERACAO", referencedColumnName = "ID_OPERACAO"))
	public Collection<Operacao> getOperacoes() {
		return operacoes;

[b]BEAN SIMPLIM:[/b]

@OneToOne(targetEntity = Operacao.class, fetch = FetchType.EAGER, cascade = CascadeType.ALL)
	public Operacao getOperacao() {
		return operacao;
	}

CONTROLLER: no meu controller de simplim por exemplo, chamo um servico que cadastra uma operacao simplim onde esta tem um objeto operacao e apos isso ele grava as documentacoes referentes a esta operacao.

public String gravar() {
		String retorno = PAGINA_SUCESSO;

		try {
			this.setTipoAcao(null);
			this.setExibirProgress(false);

			this.setTipoGravacao(SituacaoOperacaoEnum.CADASTRADA);
			this.setExibeMenssagemCadastro(true);
			// verifica se o id da operação é diferente de nullo
			Long id = null;
			
			if (getIdOperacao() != null) {
				id = new Long(getIdOperacao());
			}

			// realiza chamada para o serviço que irá realizar gravação
			Simplim simplim = convertModelToEntity();

			// atualiza valores calculados
			simplim.getOperacao().setValorMN(valorMN);
			simplim.getOperacao().setValorIOF(valorIof);
			simplim.getOperacao().setValorDespesas(valorDespesa);
			simplim.getOperacao().setValorTotal(valorTotal);
			
			//adiciona simplim
			cambioService.adicionarSimplim(simplim, id);
						
			List<Operacao> operacoes = new ArrayList<Operacao>();
			operacoes.add(simplim.getOperacao());
			
			//cadastra a documentacao que o cliente fez upload
			for (Documentacao doc : docs) {
				doc.setPessoa(pessoaLogada);
				doc.setOperacoes(operacoes);
				cambioService.adicionarDocumentacao(doc);
			}
			
			addMessageSucesso();
			logarOperacao(simplim, LogAcaoEnum.INCLUSAO);
			this.inicializarFormulario();
		} catch (BusinessException e) {
			String message = FacesBundleUtil.getInstance().getString(e.getMessage());
			addMessage(FacesMessage.SEVERITY_ERROR, message, e);
			retorno = PAGINA_FALHA;
		} catch (ValidateException e) {
			addMessage(FacesMessage.SEVERITY_INFO, e.getMessages(), e);
			retorno = PAGINA_FALHA;
		} catch (Exception e) {
			String message = FacesBundleUtil.getInstance().getString(e.getMessage());
			addMessage(FacesMessage.SEVERITY_ERROR, message, e);
			retorno = PAGINA_FALHA;
		}

Este metodo convertModelToEntity() ira preencher todos os campos do obj Simplim, inclusive a operacao.
Aii eis a minha duvida… no momento que seto uma operacao dentro do obj simplim ele ja cadastra no banco???

Pois mando gravar o simplim desta forma: getEntityManager().merge(simplim);

O sistema esta cadastrando de 2 a 3 vezes a mesma informacao. Quando na verdade teria que cadastrar apenas 1 vez.
ex. Hje esta cadastrando deste jeito 3 operacoes, 2 documentos e na tabela de resolucao uma operacao pra cada documento. Tudo errado…

tabela operacao
id: 125 - simplim01
id: 126 - simplim01
id: 127 - simplim01

tabela documentacao
id: 1 - rg
id: 2 - cpf

tabela documentacao_operacao
126 - 1
127 - 2

Será que deu pra entender??? aff confuso…

bom agradeco a atencao…
att, :wink:

Bom galera RESOLVI meu problema, apenas inverti o mapeamento. Antes na documentacao tinha a operacao. Agora a Operacao contem uma lista de documentacoes… e so… simples de implementar e funciona perfeitamente.

tal erro ocorreu comigo quando oculto um campo de um jsp …
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing…
E com as informações do paulo achei meio confuso e não consegui resolver …
Sera que alguem pode me auxiliar ?

[quote=Matheus Paiva]tal erro ocorreu comigo quando oculto um campo de um jsp …
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing…
E com as informações do paulo achei meio confuso e não consegui resolver …
Sera que alguem pode me auxiliar ?
[/quote]

A exceção pode ser a mesma, mas a causa dela pode ser completamente distinta. O ideal é tu criar outro tópico na área de JEE.
No Java Básico é mais difícil alguém te auxiliar com essa questão . E se informando o campo não gera erro e deixando ele oculto gera, está bem estranho. Não deveria funcionar independente disso, pois esse erro tem relação com o estado do objeto em questão.

[quote]Paulo Silveira
Estou com o mesmo problema, andei pesquisando aqui,
quando persisto novamente ele cria mais um objeto não populado na minha tabela, no caso NULL
Pode me ajudar ?

[/quote]

Galera se alguém puder me auxiliar estou passando pelo mesmo problema.

E só falta isso pra finalizar o sistema.

Meu cenário e o seguinte.

Tenho uma classe Aluno no seguinte formato:

@Entity
@Table(name = "aluno", catalog = "baselibrus")
public class Aluno implements java.io.Serializable {

	private Integer idAluno;
	private String nome;
	
        private List<Reserva> reservas;
	
	public Aluno() {
	
	}

	@Id
	@GeneratedValue(strategy = IDENTITY)
	@Column(name = "idAluno", unique = true, nullable = false)
	public Integer getIdAluno() {
		return idAluno;
	}

	public void setIdAluno(Integer idAluno) {
		this.idAluno = idAluno;
	}

	@Column(name = "nome", length = 45)
	@Length(max = 45)
	@NotEmpty
	public String getNome() {
		return this.nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	@OneToMany(cascade = CascadeType.PERSIST, fetch=FetchType.EAGER,mappedBy ="aluno")
	public List<Reserva> getReservas() {
		return reservas;
	}

	public void setReservas(List<Reserva> reservas) {
		this.reservas = reservas;
	}
	
}

Uma classe Reserva no seguinte formato:


@Entity
@Table(name = "reserva", catalog = "baselibrus")
public class Reserva implements java.io.Serializable {

	private Integer id;
        private Aluno aluno; 	
        private Livro livro; 
    
    
	public Reserva() {
	}

	@Id
	@GeneratedValue(strategy = IDENTITY)
	@Column(name = "id", unique = true, nullable = false)
	public Integer getId() {
		return this.id;
	}

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

	
	@ManyToOne
	@JoinColumn(name="idAluno", insertable = true, updatable = true)
	public Aluno getAluno() {
		return aluno;
	}

	public void setAluno(Aluno aluno) {
		this.aluno = aluno;
	}

	
	@ManyToOne
	@JoinColumn(name="idLivro", insertable = false, updatable = false)
	public Livro getLivro() {
		return livro;
	}

	public void setLivro(Livro livro) {
		this.livro = livro;
	}

}

E por fim uma classe chamada Livro:

@Entity
@Table(name = "livro", catalog = "baselibrus")
public class Livro implements java.io.Serializable {

	private Integer idLivro;
	private List<Reserva> reservas;
	
	
	public Livro() {
	}

	
	@Id
	@GeneratedValue(strategy = IDENTITY)
	@Column(name = "idLivro", unique = true, nullable = false)
	public Integer getIdLivro() {
		return idLivro;
	}

	public void setIdLivro(Integer idLivro) {
		this.idLivro = idLivro;
	}

	
        @OneToMany(cascade = CascadeType.PERSIST, fetch=FetchType.EAGER, mappedBy ="livro")
	public List<Reserva> getReservas() {
		return reservas;
	}

	public void setReservas(List<Reserva> reservas) {
		this.reservas = reservas;
	}

}

A classe Reserva se relaciona com Aluno e Livro, mas quando tento persistir uma ID para Aluno e uma ID para Livro recebo

org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing:

Prezados boa noite, cá estou eu ressucitando o tópico também, mais no meu caso eu nem cheguei a abrir a tela ou seja não estou no modo de edição.

Na criação de uma tela de contatos ( pessoas de uma agenda ) eu coloquei dois combos ( aqueles de Estado filtrando os Municipios ) e então a tela agora
não abre mais dando o erro

/private/pages/contatos/contatosIndex.xhtml @152,50 value="#{contatoC.municipios}": Error reading 'municipios' on type br.com.dominio.controller.ContatoC

e um pouco mais abaixo o log mostra

 org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: br.com.dominio.modelo.Estado

a linha da classe ContatoC onde ocorre o erro é a seguinte

public SelectItem[] getMunicipios() {
   if (estado != null) {
	   municipios = FacesUtil.getSelectItems(municipioService.consultaMunicipios(estado), true);
    }		
   return municipios;
}

como observei os comentarios e pelo que eu entendi tem algo a ver com as entidades vou colocar aqui parte da classe Municipio

@Entity
@Table(name = "municipio")
@NamedQuery(
		name = "municipioPorEstado",
		query = "select m from Municipio m where m.estado = :estado order by m.dsMunicipio"
	)
public class Municipio implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)    
	@Column(name="id_municipio")
	private Integer idMunicipio;

	@Column(name="ds_municipio")
	private String dsMunicipio;

	//bi-directional many-to-one association to Estado
	@ManyToOne
	@JoinColumn(name="id_estado")
	private Estado estado;		
	
	//bi-directional many-to-one association to Municipio
	@OneToMany(mappedBy="municipio")
	private List<Contato> contatos;
		

    public Municipio() {
    }

Prezados fico no aguarde de alguma dica porque mexi hoje a tarde toda e num consegui resolver.