Org.hibernate.PersistentObjectException: detached entity passed to persist ao tentar um merge

1 resposta
neno

pessoal, to postando aqui pra ver se alguem fala alguma coisa que me de uma luz…

eu tenho as seguintes entidades mapeadas.

@Entity
@Table(name="ART_ART")
public class ART implements Serializable {
....
	@OneToMany(fetch=FetchType.EAGER, mappedBy="art", cascade=CascadeType.ALL)
	private List<ContratoART> contratos;
....
}

@Entity
@Table(name="ART_CONTRATO")
public class ContratoART implements Serializable {
...
	@OneToMany( fetch=FetchType.LAZY, mappedBy="contratoART", cascade=CascadeType.ALL)
	private List<QuantificacaoART> quantificacoes;
...

}


@Entity
@Table(name="ART_QUANTIFICACAO")
@SequenceGenerator(name="QUANTIFICACAO_SEQUENCE",sequenceName="ART_QUANTIFICACAO_SEQ")
public class QuantificacaoART implements Serializable {

	....
	@ManyToOne
	@JoinColumn(name="FK_CONTRATO_ART")
	private ContratoART contratoART;
...
}

e quando eu vou dar um merge em um objeto de ART é lançada a exeção

Caused by: javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: creacorp.art.entidade.QuantificacaoART at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:647) at org.hibernate.ejb.QueryImpl.getSingleResult(QueryImpl.java:99) at creacorp.financeiro.dao.FinDividaDaoImpl.getDividaByIdentificadorENatureza2(FinDividaDaoImpl.java:5024) 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:585) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:112) at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:166) at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:46) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.tx.TxPolicy.invokeInCallerTx(TxPolicy.java:126) ... 90 more

o negocio é que a execao é lancada quando vo fazer uma consulta de no banco que nao tem vinculo com essas entidades =/, mas que a consulta faz parte do processo de alteração… e o que
esta mais me deixando confuso é que com alguns objetos de ART não ocorre o erro e em outros ocorre.

Alguma ideia do que pode causar isso?

Estou utilizando EJB3

1 Resposta

buiutb

neno:
pessoal, to postando aqui pra ver se alguem fala alguma coisa que me de uma luz…

eu tenho as seguintes entidades mapeadas.

@Entity
@Table(name="ART_ART")
public class ART implements Serializable {
....
	@OneToMany(fetch=FetchType.EAGER, mappedBy="art", cascade=CascadeType.ALL)
	private List<ContratoART> contratos;
....
}

@Entity
@Table(name="ART_CONTRATO")
public class ContratoART implements Serializable {
...
	@OneToMany( fetch=FetchType.LAZY, mappedBy="contratoART", cascade=CascadeType.ALL)
	private List<QuantificacaoART> quantificacoes;
...

}


@Entity
@Table(name="ART_QUANTIFICACAO")
@SequenceGenerator(name="QUANTIFICACAO_SEQUENCE",sequenceName="ART_QUANTIFICACAO_SEQ")
public class QuantificacaoART implements Serializable {

	....
	@ManyToOne
	@JoinColumn(name="FK_CONTRATO_ART")
	private ContratoART contratoART;
...
}

e quando eu vou dar um merge em um objeto de ART é lançada a exeção

Caused by: javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: creacorp.art.entidade.QuantificacaoART at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:647) at org.hibernate.ejb.QueryImpl.getSingleResult(QueryImpl.java:99) at creacorp.financeiro.dao.FinDividaDaoImpl.getDividaByIdentificadorENatureza2(FinDividaDaoImpl.java:5024) 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:585) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:112) at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:166) at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:46) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.tx.TxPolicy.invokeInCallerTx(TxPolicy.java:126) ... 90 more

o negocio é que a execao é lancada quando vo fazer uma consulta de no banco que nao tem vinculo com essas entidades =/, mas que a consulta faz parte do processo de alteração… e o que
esta mais me deixando confuso é que com alguns objetos de ART não ocorre o erro e em outros ocorre.

Alguma ideia do que pode causar isso?

Estou utilizando EJB3

Está dando o mesmo erro para mim…
Alguém ai tem uma solução ?

Criado 6 de maio de 2011
Ultima resposta 7 de dez. de 2011
Respostas 1
Participantes 2