Erro no momento de persistir (EJB + Hibernate) - Erro: detached entity passed to persist

Olá Srs.

[O Erro]
Estou com a seguinte Msg de Erro no momento da persistência:

EJB5018: An exception was thrown during an ejb invocation on [DominioFacade]
javax.ejb.TransactionRolledbackLocalException: Exception thrown from bean; nested exception is: javax.persistence.PersistenceException:
org.hibernate.PersistentObjectException: detached entity passed to persist: beans.Cliente

[Meu cenário]

  • Um Cliente tem vários domínios de internet
  • Muitos domínios podem estar associados a um mesmo cliente.
  • Um Domínio Participa de uma hospedagem.

[Classes]

  • Classe Cliente
@Entity
@SequenceGenerator(sequenceName = "cliente_sequence", name = "cliente_sequence", initialValue = 1, allocationSize = 1)
public class Cliente implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "cliente_sequence")
    private int id;
    @OneToMany(mappedBy = "cliente", cascade = CascadeType.ALL)
    private List<Dominio> dominios;
    (...) //demais atributos e metodos
}
  • Classe Domínio
@Entity
@SequenceGenerator(sequenceName = "dominio_sequence", name = "dominio_sequence", initialValue = 1, allocationSize = 1)
public class Dominio implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "dominio_sequence")
    private int id;
    @OneToOne(cascade = CascadeType.ALL)
    private Hospedagem hospedagem;
    @ManyToOne(cascade = CascadeType.ALL)
    private Cliente cliente;
    (...) //demais atributos e métodos
}
  • A classe Hospedagem não tem nenhuma anotação para Domínio.

[Como estou fazendo]

  • Quero cadastrar uma domínio.
  • Insiro os dados que lhe são próprios.
  • Pesquiso n BD o Cliente e Hospedagem que serão referenciados.
  • Instancio no cliente e tento persistir, como mostra abaixo:
{
//me retorna o cliente com o id 1. testei o cliente e ele retorna o cara certo.
Cliente c = (Cliente) dao.findWithDependences(Cliente.class, 1); 

//me retorna a hospedagem com o id 1. testei a hospedagem e ele retorna o cara certo.
Hospedagem h = (Hospedagem) dao.find(Hospedagem.class, 1);

Dominio d = new Dominio();
d.setNome("Dominio 1");
d.setStatus("ativo");
d.setCliente(c);
d.setHospedagem(h);

dao.create(d);
}

Obs.: pesquisei tanto aqui no GUJ qto na web e vi alguns casos em que se estava tentanto alterar algum atributo das classes correspondentes a cliente e hospedagem. Porém, não é esse o caso, uma vez que eu encontro os registros, eles estão ok, e somente instancio em dominio.

Então, qq ajuda é mto bemvinda.

Valeu! Deus abençoe!!
\o/

oi de novo

li por aí que qdo o objeto não tem id ou perde essa referência, pode causar este erro.
porém, o objeto tem id. o q eu percebi foi q ele está se perdendo na referência da transação.

A questão é: minha aplicação é EAR, com módulo EJB separado da aplicar WAR.
Qdo estou fazendo a pesquisa, o módulo EJB que contêm o entity manager, busca certinho o cara, me traz ele certinho, mas parece que ele se perde da transação.

Então, eu resolvi de um jeito gambiarral, mas não quero q seja assim.
Eu mudo, então, a pergunta inicial para:

Como manter o o objeto na transação, mesmo ele estando fora do módulo EJB?

Valeu

cara tire o cascade e coloque
@OneToMany(fetch = FetchType.EAGER)
o problema é o cascade concerteza

abraço