Problema ao Persistir Entidades Relacionadas com JPA / Hibernate

Olá Pessoal, to com um probleminha / dúvida quando a persistencia de entidades utilzando JPA.

eu tenho 2 entidades (classes) onde existe um relacionamento @OneToMany e @ManyToOne,
Eu gostaria de ao persistir a classe @OneToMany, a @ManyToOne já conseguisse ser persistida também e com o devido relacionamento.

Por Exemplo:
Arquivo

@Entity
public class Arquivo {
@Id
private Integer idArquivo;

@OneToMany
private List<Detalhe> detalhes;

@Column
private String nome;

@Temporal(TemporalType.DATE)
private Date data;
//... demais campos

// get e sets

}

Detalhe

@Entity
public class Detalhe {

@Id
private Integer idDetalhe;

@ManyToOne
@JoinColumn(name="IDARQUIVO")
private Arquivo arquivo;

@ManyToOne
@JoinColumns ({
     @JoinColumn(name="CDUNI",referenceColumnsName="CDUNI"),
     @JoinColumn(name="MATRIC",referenceColumnsName="MATRIC")
})
private Cliente cliente;

@Column
private Double valorTotal;

@Column
private Double valorJuros;


// demais campos
// get e set

}

Quando eu fizer,

EntityManager em = emf.createEntityManager(); // emf = EntityManagerFactory
Arquivo arquivo = new Arquivo();
arquivo.setNome("NomeQualquer");
arquivo.setData(new Date());
//
List<Detalhe> detalhes = AlguemQueMeGereUmaListaDeDetalhes(); // lembrando que ele aqui não teria nenhuma info de arquivo
arquivo.setDetalhes(detalhes);
em.persist(arquivo); // Aqui ele conseguiria criar (persistir) detalhes ?

Nessa situação ae eu teria 2 dúvidas,
1ª - Eu conseguiria ae fazer o persist em arquivo, salvar(persistir) detalhes (Lista de Detalhe) ? (lembrando que detalhes não foi persistido nenhuma vez)

  • suposta resposta… teria de usar cascade=CascadeType.PERSIST ?

2ª - Para que Detalhe tivesse a referencia de Arquivo após ser salvo no banco (persist), eu teria de fazer

for(Detalhe detalhe : detalhes) {
 detalhe.setArquivo(arquivo); // ? , ou seja inserir arquivo em cada detalhe?
}

Ou seja, eu preciso inserir arquivo em cada detalhe , ou tem algo que eu possa fazer que no ato de persitir arquivo em que eu “seto” a lista de Detalhe, ele ja consiga saber que tem essa referencia com aquele arquivo…
Digo isso, porque se eu não faço o setArquivo, não me aparece o idArquivo com valor em Detalhe.

Minha 3a dúvida é meio que tosca, mas…
digamos que quando vou criar Detalhe, eu não consiga obter um Entity de Cliente (que possui uma chave primeria composta), eu poderia fazer algo como

Detalhe detalhe = new Detalhe();
detalhe.setValorTotal(valorJuros);
detalhe.setValorTotal(valorTotal);
Cliente c = new Cliente(); // o grande pro aqui é que eu vou passar valore de um cliente que ja existe, na verdade eu deveria obter ele..
c.setClientePK(cdUni,matric); // posso ?
detalhe.setCliente(cliente); // 
//

A minha dúvida era se eu poderia fazer isso ali, inicializar o objeto somente com a PK dele e quando for fazer a persistencia o JPA/Hibernate descobrir quem é na verdade esse Cliente e fazer o relacionamento com Detalhe.
Existe algum problema eu eu ter esse ManyToOne em Detalhe e não ter feito um OneToMany tem Cliente ?

Abraços,

ae pessoal, estou com essa mesma dúvida, alguem poderia responder

desde já agradeço

Boa tarde!

Dá uma pesquisada na propriedade cascade da notação @OneToMany
No cascade você tem várias opções; “ALL”, "PERSISTS, “DELETE”, e por ai vai

Espero ter ajudado

Att,