persistência com JPA

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.