Pessoal uma dúvida sobre persistência com JPA.
Modelo:
Entidades: A,B,C,D
A ? B
B ? C
D ? C
Em que ? representa 1 para N
Ao persistir em.persist(obj); qual objeto deve ser persistido?
Se persisto o objeto ?A? ele reclama (object references an unsaved transient instance - save the transient instance before flushing: D->C). Se persisto o objeto ?D? ele reclama (object references an unsaved transient instance - save the transient instance before flushing: C->B).
O JPA/hibernate consegue persistir o grafo de objetos todo? Como proceder?
Desde já agradeço por qualquer ajuda.
Ola marciano1,
Tem como fazer sim.
No JPA existe uma annotation chamada @Cascade. Ela é colocada sobre o atributo que vc quer persist junto com a entidade pai, no seu caso colocar sobre o atributo B na classe A.
ex:
[code] @Entity
public class A implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@OneToMany
@Cascade(CascadeType.ALL)
private List< B > b;
}[/code]
Espero ter ajudado.
abs
Ainda estou na batalha,
Agora com o seguinte problema:
Gero classes para chaves compostos A_pk e mapeio usando @Embeddable
eu faço new em A e new A_pk e coloco A_pk em A.
A rebebe uma chave de B, que deve ir para A_pk. A chave de B é gerado normalmente por uma sequence. Ao persistir ele reclama que A_pk nao esta com a chave de B, A_pk está com 0 enquanto B esta com id =10 por exemplo,
Como colocar a chave de B no A_pk de A dinamicamente?
Sou obrigado a fazer em.persist(B); e nao posso, ao mandar persistir pegar o id de B e colocar em A.
Obrigado pela ajuda.
Ola…
Terias como colocar o codigo desse seu exemplo?
abs
Me perdi antes mesmo de chegar na metade da explicação.
A premissa é simples. Ou cascade ou salve as dependências antes.
Agora, vc pode estar enrascado se tiver dependências circulares com obrigatoriedade, não sei
se é o caso, se for revise o modelo.