GARANTIR DESCONTO

Fórum Erro ao persistir usando @ManyToOne(cascade = { CascadeType.MERGE, CascadeType.PERSIST }) #524666

02/07/2015

0

Bom dia pessoal, estou com erro ao persistir duas tabelas por exemplo a 1º Tabela faço cadastro normal, quando vou lançar a segunda eu pesquiso dados da primeira ao preencher formulário e salvar está dando o seguinte erro abaixo:

class

@Entity
@Table(name = "TBTERMOLIBERACAO")
public class TermoLiberacao implements Serializable {

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

@ManyToOne(cascade = { CascadeType.MERGE, CascadeType.PERSIST })
@JoinColumn(name = "ID_LANCAMENTO")
@NotNull
private LancamentoPatio lancamento;


}


bean

public void emitirTermoLiberacao() throws SQLException {
Seguranca s = new Seguranca();


lancamentoPatio.setStatus(StatusVeiculo.EMITIDO);
termoLiberacao.setLancamento(this.lancamentoPatio);
termoLiberacao.setDatalancamento(new Date());
termoEJB.adiciona(termoLiberacao);
FacesUtil.addInfoMessage("Lançamento efetuado com sucesso!");
limparLista();
}




Caused by: javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: com.mobilidade.urbana.modelo.LancamentoPatio
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1763) [hibernate-entitymanager-4.3.7.Final.jar:4.3.7.Final]
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1677) [hibernate-entitymanager-4.3.7.Final.jar:4.3.7.Final]
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1683) [hibernate-entitymanager-4.3.7.Final.jar:4.3.7.Final]
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:1187) [hibernate-entitymanager-4.3.7.Final.jar:4.3.7.Final]
at org.jboss.as.jpa.container.AbstractEntityManager.persist(AbstractEntityManager.java:581) [wildfly-jpa-8.2.0.Final.jar:8.2.0.Final]
at com.mobilidade.urbana.repository.TermoLiberacaoEJB.adiciona(TermoLiberacaoEJB.java:32) [classes:]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.8.0_45]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) [rt.jar:1.8.0_45]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) [rt.jar:1.8.0_45]
at java.lang.reflect.Method.invoke(Unknown Source) [rt.jar:1.8.0_45]
Adriano Aguiar

Adriano Aguiar

Responder

Posts

06/07/2015

Ronaldo Lanhellas

Quando você salva a "primeira tabela" vocÊ não está guardando a nova referência dela no PersistenceContext, por isso o erro. Então depois de salvar a primeira tabela vocÊ tem que retornar o novo objeto salvo e usá-lo na segunda, assim:

Tabela1 tab1 = new Tabela1();
tab1 = save(tab1); //Peguei a instância retornada pelo Hibernate
Tabela2 tab2 = new Tabel2();
tab2.setTab1(tab1); 
save(tab2);
Responder

Gostei + 0

06/07/2015

Ronaldo Lanhellas

Quando você salva a "primeira tabela" vocÊ não está guardando a nova referência dela no PersistenceContext, por isso o erro. Então depois de salvar a primeira tabela vocÊ tem que retornar o novo objeto salvo e usá-lo na segunda, assim:

Tabela1 tab1 = new Tabela1();
tab1 = save(tab1); //Peguei a instância retornada pelo Hibernate
Tabela2 tab2 = new Tabel2();
tab2.setTab1(tab1); 
save(tab2);
Responder

Gostei + 0

06/07/2015

Ronaldo Lanhellas

Quando você salva a "primeira tabela" vocÊ não está guardando a nova referência dela no PersistenceContext, por isso o erro. Então depois de salvar a primeira tabela vocÊ tem que retornar o novo objeto salvo e usá-lo na segunda, assim:

Tabela1 tab1 = new Tabela1();
tab1 = save(tab1); //Peguei a instância retornada pelo Hibernate
Tabela2 tab2 = new Tabel2();
tab2.setTab1(tab1); 
save(tab2);
Responder

Gostei + 0

07/07/2015

Carlos Proença

Fala Adriano blz?

o erro é esse aqui
org.hibernate.PersistentObjectException: detached entity passed to persist:


da um
entityManager.merge(obj)
antes de dar um
entityManager.persist(obj)
pq o seu objeto ta fora do contexto do hibernate
da uma olhada caelum link

att.
Responder

Gostei + 0

10/07/2015

Adriano Aguiar

Obrigado, era isso mesmo entityManager.merge(obj)


grato,
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar