Quando tento persistir a entity1, segue o seguinte erro:
[color=red]15:35:54,971 ERROR [[Faces Servlet]] Servlet.service() for servlet Faces Servlet threw exception
org.hibernate.PersistentObjectException : detached entity passed to persist: teste.Entity2[/color]
A entity 1 que será persistida tem uma objeto de entity 2 com apenas o seu id.
Esse esquema já funciona em outros projetos, mas agora não funciona nesse outro.
Estive procurando no google, e parece que algumas pessoas tiveram o erro ao persistir um objeto passando o seu ID. No meu caso, entity1 não contém um id ainda. Ele eh gerado por uma identity.
Documentação: Thrown when the user passes a persistent instance to a Session method that expects a transient instance.
O id de Entity1 deverá ser null no momento da persistência.
Não sei de que forma está sendo feito, mas tente editar o código do método
getId com algo assim: return (id.equals(0) ? null : id);
ou configure manaulmente o id com o valor null.
L
liss
rodrigoy:
liss:
A entity 1 que será persistida tem uma objeto de entity 2 com apenas o seu id.
O que vc quer dizer com apenas o seu ID?
Oi Rodrigo.
Eu quis dizer que a entity 2 que eu seto no entity 1 contém apenas o id, por exemplo:
Entity2 e2 = new Entity2();
e2.setId(1); //chave estrangeira
Entity1 e1 = new Entity1();
e1.setE2(e2);
em.persist(e1);
Em alguns momentos funciona, em outros não.
No caso dessas entities, só funcionou quando eu tire o Cascade.
Em outros casos, funciona perfeitamente.
Ah, parabéns pela palestra no Java Brasil!
[]s
LISS
R
raf4ever
Tbm estou passando por isso…
alguma luz?
L
liss2 likes
raf4ever:
Tbm estou passando por isso…
alguma luz?
Olá Raf4ever,
Vou colocar abaixo a resposta que tive numa lista.
qdo vc definiu a estratégia de cascade sendo CascadeType.ALL, todo relacionamento q a sua entity tem, e a operação q vc estiver fazendo nela, ele acaba fazendo o msm para os relacionamento
Ou seja, quando tirei a propriedade cascade, funcionou corretamente.
[]s
LISS
R
raf4ever
O problema eh q ja tirei o cascade…
A
andredecotia
Geraldo Eliezer:
Boa tarde Rodrigoy!
Documentação: Thrown when the user passes a persistent instance to a Session method that expects a transient instance.
O id de Entity1 deverá ser null no momento da persistência.
Não sei de que forma está sendo feito, mas tente editar o código do método
getId com algo assim: return (id.equals(0) ? null : id);
ou configure manaulmente o id com o valor null.
O que quer dizer instância transiente?
C
CarlEdwin
Geraldo Eliezer:
Boa tarde Rodrigoy!
Documentação: Thrown when the user passes a persistent instance to a Session method that expects a transient instance.
O id de Entity1 deverá ser null no momento da persistência.
Não sei de que forma está sendo feito, mas tente editar o código do método
getId com algo assim: return (id.equals(0) ? null : id);
ou configure manaulmente o id com o valor null.
Gostaria de agradecer.
Eu estava com o mesmo problema e utilizei a dica e deu certo.
Valeu!!!
robson.alecio
Recentemente tive o mesmo problema resolvi trocando a estratégia de cascata de ALL para DETACH.
T
tiagobalduino
Robson.alecio eu fiz a troca como você disse de ALL para DETACH mas assim a minha entidade não sofre as mudanças que sofreria com o ALL, o que será que devo fazer ?
robson.alecio1 like
tiagobalduino o problema acontece porque você está tentando persistir uma entidade relacionada que não está salva ou no contexto da persistência.
Imagine um exemplo aonde temos Cidade dependendo de Estado, salve primeiro o estado e depois a Cidade.
Dependendo do framework que você está utilizando se fazer necessários pegar o objeto resultado da operação de persistência e settar esse objeto salvo no dependente.
Se isso não resolver, por gentileza post a pilha do erro.
T
tiagobalduino
Robson fiz como você disse e deu certo, retirei o cascadeType.ALL e salvei primeiro uma classe e depois a outra ficou certinho Obrigado pela ajuda parceiro, já estava com esse problema a mais de uma semana