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/