Hibernate relacionamento 1xN - qual o melhor método para realizar um cadastro

6 respostas
LucianoTulio

Estou precisando realizar um cadastro simples

onde um relacionamento bidirecional 1xN precise realizar um
CRUD.

Na minha primeira tentativa realizei um cascade na Entidade do lado 1

que contem a lista utilizando o JPA

@OneToMany(mappedBy="aquisicao", cascade = CascadeType.ALL)
private List<AquisicaoIR> aquisicaoirlista;

Utilizei o ALL pq preciso tanto incluir, atualizar, excluir e ler as informações da Entidade N

mas quando preenchi o objeto da entidade 1 e a lista

quando fui realizar o cadastro os dados da lista foi persistido mas a chave da entidade 1
foi no valor null.

Ae para resolver eu mudei o cascade para REMOVE para apenas realizar a opção de remover

e para cadastrar coloque o cascade no lado da Entidade N

@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name="id_aquisicaoservico")
private AquisicaoServico aquisicao;

assim o cadastro é realizado sem nenhum problema.

Mas esse é o jeito certo? Pensei nesta solução logo que para a lista ter a
chave estrangeira a Entidade 1 precisa já ter sido persistida.

Gostaria de uma ajuda. Obrigado

6 Respostas

Hebert_Coelho

Você tem que persitir o objeto que tem a lista, e não a lista sozinha apenas.

Aqui explica como funciona o cascade: JPA: Mini Livro - Primeiros passos e conceitos detalhados.

LucianoTulio

Kra sigo todos os seus materiais axo muito util

mas essa foi minha duvida no seu material.

Tipo eu sei q o certo era eu persisti o obj nao a lista
mas como faço para inclui a chave estrangeira.

teria como me mostra um exemplo simples

LucianoTulio

A logica é essa, o usuario realiza o cadastro e neste cadastro tem uma lista
ele adiciona valores nesta lista.

para finalizar o cadastro ele tem a lista que deve ser persistida na tabela N

e o cadastro que é na tabela 1,

a tabela N recebe o id do cadastro da tabela 1

logo quando ele grava, primeiro precisa gerar esse id cadastrando na tabela 1
para depois realizar o cadastro da tabela N com a chave dela.

Não consigo pensar numa logica para isso

LucianoTulio

Acho q vou fazer unidirecional

fazer o usuario realizar todo o cadastro persistir o cadastro

quando for persistir a lista eu procuro o id do cadastro realizado.

Foi o melhor q pensei. Não consegui ver o cascade me ajudando neste
tipo de ação.

LucianoTulio

Resolvi realizando o save primeiro do lado one
e depois save do lado Many

agora pra excluir ele não faz o cascade.

quero excluir do lado one excluir tudo do lado Many

não faz

LucianoTulio

Vlw msm Hebert, vi seu material e acabei entendendo, para que o cascade funcione eu preciso apenas declarar
as chaves na minha lista que ele funciona perfeitamente.

Obrigado

Criado 24 de janeiro de 2013
Ultima resposta 7 de fev. de 2013
Respostas 6
Participantes 2