Solucionado (ver solução)
Solucionado
(ver solução)
9
respostas

destachad erro

Pessoal, estou encontrando o seguinte problema na hora de fazer um certo cadastro:

HTTP Status 500 - javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.arena.model.Pessoa

Meu objetivo e realizar o cadastro de um Time, esse time fica associado a uma Pessoa através de uma associativa Pessoa_Time

Pessoa 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();
    }

Pessoa_Time 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();
    }

PessoaDAO:

public class PessoaDAO {

    private EntityManager em;

    public PessoaDAO() {
        setEm(JPAUtil.getEntityManager());
    }

    public void cadastrar(Pessoa pessoa){
        getEm().getTransaction().begin();
        getEm().persist(pessoa);
        getEm().getTransaction().commit();
    }

TimeDAO:

public class TimeDAO {

    private EntityManager em;

    public TimeDAO() {
        setEm(JPAUtil.getEntityManager());
    }

    public void cadastrar(Time time){
        getEm().getTransaction().begin();
        getEm().persist(time);
        getEm().getTransaction().commit();
    }

PessoaTimeDAO:

public class PessoaTimeDAO {

    private EntityManager entityManager;

    public PessoaTimeDAO() {
        setEntityManager(JPAUtil.getEntityManager());
    }

    public void cadastrar(PessoaTime pessoaTime){
        getEntityManager().getTransaction().begin();
        getEntityManager().persist(pessoaTime);
        getEntityManager().getTransaction().commit();
    }

PessoaBean:

@ManagedBean(name = "pessoaMB")
@SessionScoped
public class PessoaBean implements Serializable{

    private static final long serialVersionUID = 1L;
    private Pessoa pessoa = new Pessoa();
    private PessoaDAO dao = new PessoaDAO();

    public PessoaBean(){}

    public Pessoa usuarioLogado(){

        FacesContext context = FacesContext.getCurrentInstance() ;
        Pessoa usuarioLogado = (Pessoa) context.getExternalContext() .getSessionMap().get("usuarioLogado");
        Integer id = usuarioLogado.getId();
        Pessoa p = getDao().pessoaLogada(usuarioLogado);
        return p;
    }

    public String cadastrar() {
        getDao().cadastrar(getPessoa());
        limpaTela();
        return "login.xhtml";
    }

TimeBean:

@ManagedBean(name = "TimeMB")
@SessionScoped
public class TimeBean implements Serializable{

    private static final long serialVersionUID = 1L;
    private Time time = new Time();
    private TimeDAO dao = new TimeDAO();
    private Pessoa pessoa = new Pessoa();
    private PessoaDAO pessoaDao = new PessoaDAO();

    public TimeBean(){}

    public Pessoa usuarioLogado(){
        Pessoa p = null;
        FacesContext context = FacesContext.getCurrentInstance() ;
        Pessoa usuarioLogado = (Pessoa) context.getExternalContext() .getSessionMap().get("usuarioLogado");
        if(usuarioLogado != null){
            p = getPessoaDao().pessoaLogada(usuarioLogado);
        }        
        return p;
    }

    public void cadastrar() {

        getDao().cadastrar(getTime());    
        PessoaTime pessoaTime = getPessoaTime(usuarioLogado(), getTime());
        PessoaTimeDAO pessoaTimeDAO = new PessoaTimeDAO();
        pessoaTimeDAO.cadastrar(pessoaTime);
        limpaTela();
    }

    public PessoaTime getPessoaTime(Pessoa pessoa, Time time){
        PessoaTime p = new PessoaTime();
        p.setPessoa(pessoa);
        p.setTime(time);
        return p;
    }

Por fim, o meu cadastrarTime.xhtml:

<h:form class="form-label" id="cadastrarTime">
                            <div class="form-group row">
                                <label for="thread" class="col-md-2">Nome do Time:</label>
                                <div class="col-md-10">
                                    <h:inputText value="#{TimeMB.time.nome}" type="nome" class="form-control" id="nome" placeholder="Adicione um nome ao seu time"/>
                                </div>
                            </div>
                            <div class="form-group row">
                                <label for="description" class="col-md-2">Senha do Time:</label>
                                <div class="col-md-10">
                                    <h:inputSecret value="#{TimeMB.time.senhaTime}" type="password" class="form-control" id="senha" placeholder="Senha do seu Time"/>
                                </div>
                            </div>    

                            <!-- <div class="form-group row">
                                <label class="col-md-2">Descrição do Time</label>
                                <div class="col-md-10">
                                    <div class="forum-post no-margin no-shadow">
                                        <div class="text-editor"></div>
                                    </div>
                                </div>
                            </div> -->
                            <div class="text-center">
                                  <h:commandButton action="#{TimeMB.cadastrar()}"  value="Cadastrar" class="btn btn-primary btn-lg btn-rounded btn-shadow"/>
                        </div>
                        </h:form>
9 respostas

Rafael, pode passar o stacktrace inteiro, e não só a mensagem da exceção? Com isso poderemos saber em qual linha de código exatamente ocorreu o erro e poderemos ajudá-lo com maior facilidade =)

Segue como pedido,

jul 15, 2016 11:22:19 AM com.sun.faces.lifecycle.InvokeApplicationPhase execute
ADVERTÊNCIA: #{TimeMB.cadastrar()}: javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.arena.model.Pessoa
javax.faces.FacesException: #{TimeMB.cadastrar()}: javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.arena.model.Pessoa
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
    at javax.faces.component.UICommand.broadcast(UICommand.java:315)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)
Caused by: javax.faces.el.EvaluationException: javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.arena.model.Pessoa
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    ... 28 more
Caused by: 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.controller.TimeBean.cadastrar(TimeBean.java:47)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.el.parser.AstValue.invoke(AstValue.java:247)
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:267)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
    ... 29 more
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)
    at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:291)
    at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:239)
    at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:192)
    at org.hibernate.engine.Cascade.cascade(Cascade.java:153)
    at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:454)
    at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:288)
    at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
    at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)
    at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:49)
    at org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:154)
    at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:110)
    at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:61)
    at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:645)
    at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:619)
    at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:623)
    at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:220)
    ... 39 more

jul 15, 2016 11:22:19 AM org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet [Faces Servlet] in context with path [/arena] threw exception [javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.arena.model.Pessoa] with root cause
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)
    at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:291)
    at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:239)
    at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:192)
    at org.hibernate.engine.Cascade.cascade(Cascade.java:153)
    at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:454)
    at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:288)
    at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
    at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)
    at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:49)
    at org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:154)
    at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:110)
    at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:61)
    at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:645)
    at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:619)
    at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:623)
    at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:220)
    at br.com.arena.dao.PessoaTimeDAO.cadastrar(PessoaTimeDAO.java:18)
    at br.com.arena.controller.TimeBean.cadastrar(TimeBean.java:47)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.el.parser.AstValue.invoke(AstValue.java:247)
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:267)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    at javax.faces.component.UICommand.broadcast(UICommand.java:315)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)

Já passei por um problema semelhante e, dando uma olhada no seu código, identifiquei aqui um método problemático:

public Pessoa usuarioLogado(){
    Pessoa p = null;
    FacesContext context = FacesContext.getCurrentInstance() ;
    Pessoa usuarioLogado = (Pessoa) context.getExternalContext() .getSessionMap().get("usuarioLogado");
    if(usuarioLogado != null){
        p = getPessoaDao().pessoaLogada(usuarioLogado);
    }
    return p;
}

Se não houver um usuário logado, o método retorna um objeto nulo. No stack trace identifiquei as chamadas:

...
    at br.com.arena.dao.PessoaTimeDAO.cadastrar(PessoaTimeDAO.java:18)
    at br.com.arena.controller.TimeBean.cadastrar(TimeBean.java:47)
...

Isso indica que o problema surgiu ao tentar cadastrar um time. Mais especificamente após salvar o time: ao tentar cadastrar a relação Pessoa_Time, o hibernate deu de cara com um objeto não carregado. Detached. Isso em geral indica que o hibernate tem um objeto com id, mas sem o restante dos dados carregados. Ele não sabe então o que pode acontecer se ele salvar o objeto, pois corre o risco de sobrescrever ma mudança feita em outro ponto do código. Também pode significar que o que o método de carregar o usuário logado retornou nulo (acho que não, pois seria mais provável dar uma NullPointerException) .

Uma sugestão que eu dou é rodar em modo de debug se possível, e colocar um breakpoint logo antes de tentar salvar o modelo Pessoa_Time para dar uma olhada nas suas variáveis. Sempre ajuda =)

Outra sugestão é carregar o objeto inteiro após pegá-lo da sessão (não sabemos o que você fez em PessoaDao::pessoaLogada()).

A meu ver, a modelagem do banco parece ok, então o problema deve estar em algum destes pontos.

Espero que consiga resolver seu problema =) Caso positivo, lembre-se sempre de marcar o tópico como solucionado escolhendo a resposta que te ajudou!

Edit > PS.: A implementação do public Pessoa usuarioLogado() na classe PessoaBean está bem melhor. Indica que a classe de baixo precisa conferir se a Pessoa é nula ou não.

O PessoaDAO PessoaLogada e o seguinte?

    public Pessoa pessoaLogada(Pessoa pessoa) {

        Pessoa resultado = new Pessoa();

        String consulta = "select u from Pessoa u where u.nomeUsuario = :pUsuario";
        Query query=getEm().createQuery(consulta);

        query.setParameter("pUsuario", pessoa.getNomeUsuario());

        try {
            resultado = (Pessoa) query.getSingleResult();
        } catch (NoResultException ex) {
            return null;
        }catch (NonUniqueObjectException e) {
            return null;
        }
        return resultado;
    }

Esse método também pode ter alguns problemas:

O que acontece quando a linha resultado = (Pessoa) query.getSingleResult(); lança uma exception que não é NoResultException nem NonUniqueObjectException? Retorna um objeto sem id, que não será válido para o hibernate.

Mas dê uma olhada nas outras sugestões =)

Vou começar a analisar e debugar o código. Fiz um persistir.java aqui para tentar cadastrar isso direto no console.

Ficou da seguinte forma:

        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);        

        TimeDAO timeDAO = new TimeDAO();
        PessoaDAO pessoaDAO = new PessoaDAO();

        List<Time> listaDeTimes = timeDAO.listaTodosTimes();

        Pessoa pessoa = new Pessoa();
        pessoa.setNomeUsuario("pessoa 2");
        pessoa.setSenhaUsuario("1234567892");
        pessoa.setNomeCompleto("pessoa people 2");
        pessoa.setEmail("people2@gmail.com");
        pessoa.setIdade(10);


        pessoatime.setPessoa(pessoa);
        pessoatime.setTime(time);
        pessoatime.setCargo(Cargo.ADMINISTRADOR);

        pessoatimedao.cadastrar(pessoatime);

o erro apresentado:

Hibernate: 
    insert 
    into
        Time
        (nome, senhaTime) 
    values
        (?, ?)
Hibernate: 
    select
        time0_.id_Time as id1_3_,
        time0_.nome as nome3_,
        time0_.senhaTime as senhaTime3_ 
    from
        Time time0_
Revelations
Revelations
Revelations
Revelations
admin
Time 3
timefuncional
admin
meutime2
admin
Time 3
Time novo
Time novo
Hibernate: 
    insert 
    into
        Pessoa
        (email, idade, nomeCompleto, nomeUsuario, senhaUsuario) 
    values
        (?, ?, ?, ?, ?)
Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.arena.model.Time
    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:55)
Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.arena.model.Time
    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)
    at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:291)
    at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:239)
    at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:192)
    at org.hibernate.engine.Cascade.cascade(Cascade.java:153)
    at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:454)
    at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:288)
    at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
    at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)
    at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:49)
    at org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:154)
    at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:110)
    at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:61)
    at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:645)
    at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:619)
    at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:623)
    at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:220)
    ... 2 more

Volto em breve com mais alguns detalhes ;)

Fiz algumas alterações, declarei outras variáveis na classe de teste:

        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);        

        TimeDAO timeDAO = new TimeDAO();
        PessoaDAO pessoaDAO = new PessoaDAO();

        List<Time> listaDeTimes = timeDAO.listaTodosTimes();

        Pessoa pessoa = new Pessoa();
        pessoa.setId(2);
        pessoa.setNomeUsuario("pessoa 2");
        pessoa.setSenhaUsuario("1234567892");
        pessoa.setNomeCompleto("pessoa people 2");
        pessoa.setEmail("people2@gmail.com");
        pessoa.setIdade(10);

        pessoatime.setId(1);
        pessoatime.setPessoa(pessoa);
        pessoatime.setTime(time);
        pessoatime.setCargo(Cargo.ADMINISTRADOR);

        pessoatimedao.cadastrar(pessoatime);

stacktrace:

Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.arena.model.PessoaTime
    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:56)
Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.arena.model.PessoaTime
    at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:102)
    at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:61)
    at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:645)
    at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:619)
    at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:623)
    at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:220)
    ... 2 more
ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2
JDWP exit error AGENT_ERROR_NO_JNI_ENV(183):  [util.c:840]
solução!

Resolvido!

O erro estava no CascadeType dos atributos:

Pessoa:

@OneToMany(mappedBy = "pessoa", cascade = CascadeType.DETACH)
    private List<PessoaTime> listaPessoaTime;

Time:

@OneToMany(mappedBy = "time",cascade = CascadeType.DETACH)
    private List<PessoaTime> listaPessoaTime;

PessoaTime:

    @ManyToOne(cascade = CascadeType.DETACH)
    @JoinColumn(name="id_pessoa")
    private Pessoa pessoa;

    @ManyToOne(cascade = CascadeType.DETACH)
    @JoinColumn(name="id_time")
    private Time time;

Agora so não sei o dizer o porque, mas achei um artigo que pode ajudar: http://uaihebert.com/jpa-mini-livro-primeiros-passos-e-conceitos-detalhados/23/

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software