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
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.
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
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
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.
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
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