Erro ao persistir usando @ManyToOne(cascade = { CascadeType.MERGE, CascadeType.PERSIST })
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]
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
Curtidas 0
Respostas
Ronaldo Lanhellas
02/07/2015
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);
GOSTEI 0
Ronaldo Lanhellas
02/07/2015
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);
GOSTEI 0
Ronaldo Lanhellas
02/07/2015
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);
GOSTEI 0
Carlos Proença
02/07/2015
Fala Adriano blz?
o erro é esse aqui
da um antes de dar um pq o seu objeto ta fora do contexto do hibernate
da uma olhada caelum link
att.
o erro é esse aqui
org.hibernate.PersistentObjectException: detached entity passed to persist:
da um
entityManager.merge(obj)
entityManager.persist(obj)
da uma olhada caelum link
att.
GOSTEI 0
Adriano Aguiar
02/07/2015
Obrigado, era isso mesmo entityManager.merge(obj)
grato,
grato,
GOSTEI 0