Problema no relacionamento OneToMany
Eu tenho 2 entidades (SubModelo e Opcional) um subModelo pode ter uma lista de opcionais, isso numa relação unidirecional. Quando eu tento persistir a entidade SubModelo e ela não possui nenhum Opcional na lista opcionais, o Hibernate persiste normalmente, mas se incluo algum opcional na lista ele não persiste e dá erro me informando que a entidade Opcional não esta passível de persistência.
O Hibernate cria a terceira tabela para o relacionamento,mas não inclui nada.
uma tentativa de inclusão no ManagedBean
O erro:
O Hibernate cria a terceira tabela para o relacionamento,mas não inclui nada.
@Entity
public class SubModelo implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
@Column
@Size(max=30)
private String nome;
@NotNull
@Size (max=9)
private String motor;
@NotNull
private boolean automatico;
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
private List<Opcional> opcionais;
public class SubModelo implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
@Column
@Size(max=30)
private String nome;
@NotNull
@Size (max=9)
private String motor;
@NotNull
private boolean automatico;
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
private List<Opcional> opcionais;
@Entity
public class Opcional implements Serializable {
private static final long serialVersionUID = 3L ;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column
@Size (max = 35)
@NotNull (message = "Nome do Opcional Deve Ser Informado!")
private String nome;
@Column
@Size (max = 150)
@NotNull (message = "Descrição Detalhada Deve Ser Informado!")
private String descricao;
public class Opcional implements Serializable {
private static final long serialVersionUID = 3L ;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column
@Size (max = 35)
@NotNull (message = "Nome do Opcional Deve Ser Informado!")
private String nome;
@Column
@Size (max = 150)
@NotNull (message = "Descrição Detalhada Deve Ser Informado!")
private String descricao;
uma tentativa de inclusão no ManagedBean
public void alphaTeste(){
novoSubModelo();
subModeloSel.setMotor("1.1");
List<Opcional> listaOpc = new ArrayList<>();
listaOpci.add(opcionalService.getOpcionalById(922));
listaOpci.add(opcionalService.getOpcionalById(925));
subModeloSel.setOpcionais(listaOpc);
doAddNovoSub();
}
public void doAddNovoSub(){
try{
if (opcEditando) subModeloService.atualizaSubModelo(subModeloSel);
else subModeloService.novoSubModelo(subModeloSel);
}catch(Exception e){
System.out.println(e);
}
}
novoSubModelo();
subModeloSel.setMotor("1.1");
List<Opcional> listaOpc = new ArrayList<>();
listaOpci.add(opcionalService.getOpcionalById(922));
listaOpci.add(opcionalService.getOpcionalById(925));
subModeloSel.setOpcionais(listaOpc);
doAddNovoSub();
}
public void doAddNovoSub(){
try{
if (opcEditando) subModeloService.atualizaSubModelo(subModeloSel);
else subModeloService.novoSubModelo(subModeloSel);
}catch(Exception e){
System.out.println(e);
}
}
O erro:
22:49:56,633 ERROR [org.jboss.as.ejb3.invocation] (default task-10) WFLYEJB0034: EJB Invocation failed on component SubModeloService for method public br.com.ozelo.entidades.SubModelo br.com.ozelo.servico.SubModeloService.novoSubModelo(br.com.ozelo.entidades.SubModelo): javax.ejb.EJBException: javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.ozelo.entidades.Opcional
at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInterceptor.java:187)
at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:277)
at org.jboss.as.ejb3.tx.CMTTxInterceptor.required(CMTTxInterceptor.java:327)
at org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:239)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
at org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
Caused by: javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.ozelo.entidades.Opcional
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1692)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1602)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1608)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:1152)
at org.jboss.as.jpa.container.AbstractEntityManager.persist(AbstractEntityManager.java:580)
at br.com.ozelo.DAO.BasicDao.addEntity(BasicDao.java:22)
at br.com.ozelo.DAO.SubModeloDao.novoSubModelo(SubModeloDao.java:24)
at br.com.ozelo.servico.SubModeloService.novoSubModelo(SubModeloService.java:47)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
23:31:01,042 INFO [stdout] (default task-1) javax.ejb.EJBException: javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.ozelo.entidades.Opcional
at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInterceptor.java:187)
at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:277)
at org.jboss.as.ejb3.tx.CMTTxInterceptor.required(CMTTxInterceptor.java:327)
at org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:239)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
at org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
Caused by: javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.ozelo.entidades.Opcional
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1692)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1602)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1608)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:1152)
at org.jboss.as.jpa.container.AbstractEntityManager.persist(AbstractEntityManager.java:580)
at br.com.ozelo.DAO.BasicDao.addEntity(BasicDao.java:22)
at br.com.ozelo.DAO.SubModeloDao.novoSubModelo(SubModeloDao.java:24)
at br.com.ozelo.servico.SubModeloService.novoSubModelo(SubModeloService.java:47)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
23:31:01,042 INFO [stdout] (default task-1) javax.ejb.EJBException: javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.ozelo.entidades.Opcional
Raphael Ozelo.
Curtidas 0