I'm finding the following problem when making a certain registration:
Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.arena.model.Pessoa at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:614) at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:226) at br.com.arena.dao.PessoaTimeDAO.cadastrar(PessoaTimeDAO.java:18) at br.com.arena.util.Persistir.main(Persistir.java:54) Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.arena.model.Pessoa at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:102) at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:636) at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:628) at org.hibernate.engine.EJB3CascadingAction$1.cascade(EJB3CascadingAction.java:28) ... 18 more
My goal is to register a Team, this team is associated with a Person through an associative table Person_Time
Person Model:
@Entity
public class Pessoa implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column (name = "id_Pessoa")
private Integer id;
@Column(nullable = false, unique = true)
private String nomeUsuario;
@Column(nullable = false, unique = true)
private String senhaUsuario;
@Column(nullable = false, unique = true)
private String nomeCompleto;
@Column(nullable = false, unique = true)
private String email;
@Column(nullable = false, unique = true)
private Integer idade;
@OneToMany(mappedBy = "pessoa", cascade = CascadeType.ALL)
private List<PessoaTime> listaPessoaTime;
public Pessoa (){}
public Pessoa (Pessoa pessoa){
this.id = pessoa.getId();
this.nomeUsuario = pessoa.getNomeUsuario();
this.senhaUsuario = pessoa.getSenhaUsuario();
this.nomeCompleto = pessoa.getNomeCompleto();
this.email = pessoa.getEmail();
this.idade = pessoa.getIdade();
}
Time Model:
@Entity
public class Time implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column (name = "id_Time")
private int id;
@Column(nullable = false)
private String nome;
@Column(nullable = false)
private String senhaTime;
@OneToMany(mappedBy = "time",cascade = CascadeType.ALL)
private List<PessoaTime> listaPessoaTime;
@OneToMany(mappedBy="time",cascade = CascadeType.ALL)
private List<CampeonatoTime> listaCampeonatoTime;
public Time(){}
public Time(Time time){
this.id = time.getId();
this.nome = time.getNome();
this.senhaTime = time.getSenhaTime();
}
PersonaTime Model:
@Entity
@Table(name="pessoa_time")
public class PessoaTime implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column (name="id_PessoaTime")
private Integer id;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name="id_pessoa")
private Pessoa pessoa;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name="id_time")
private Time time;
private Cargo cargo;
public PessoaTime (){}
public PessoaTime (PessoaTime pessoaTime){
this.id = pessoaTime.getId();
this.pessoa = pessoaTime.getPessoa();
this.time = pessoaTime.getTime();
this.cargo = pessoaTime.getCargo();
}
PersonaDAO:
public void cadastrar(Pessoa pessoa){
getEm().getTransaction().begin();
getEm().persist(pessoa);
getEm().getTransaction().commit();
}
TimeDAO:
public void cadastrar(Time time){
getEm().getTransaction().begin();
getEm().persist(time);
getEm().getTransaction().commit();
}
PersonTimeDAO:
public void cadastrar(PessoaTime pessoaTime){
getEntityManager().getTransaction().begin();
getEntityManager().persist(pessoaTime);
getEntityManager().getTransaction().commit();
}
Persisting.java: Main Class
public static void main(String[] args) {
Time time = new Time();
TimeDAO timedao = new TimeDAO();
PessoaTime pessoatime = new PessoaTime();
PessoaTimeDAO pessoatimedao = new PessoaTimeDAO();
time.setNome("Time novo");
time.setSenhaTime("4");
timedao.cadastrar(time);
PessoaDAO pessoaDAO = new PessoaDAO();
Pessoa pessoa = new Pessoa();
pessoa.setNomeUsuario("pessoa 2");
pessoa.setSenhaUsuario("1234567892");
pessoa.setNomeCompleto("pessoa people 2");
pessoa.setEmail("[email protected]");
pessoa.setIdade(22);
pessoaDAO.cadastrar(pessoa);
pessoatime.setPessoa(pessoa);
pessoatime.setTime(time);
pessoatime.setCargo(Cargo.ADMINISTRADOR);
pessoatimedao.cadastrar(pessoatime);
}