Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Relacionamento com entidades não salvas jpa.

Boa Noite, estou fazendo alguns teste com Spring-Data-JPA, e tive uma duvida.

Observem as seguintes classes:

@Entity
public class Item {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne
    private Produto produto;
    private BigDecimal valor;
}
@Entity
public class Pedido {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @OneToMany
    private List<Item> itens;
}

Na classe pedido eu tenho uma lista de item, se eu instanciar um objeto item, mas não salva-lo no banco de dados e adicionar esse item na lista, e então tentar salvar o pedido, não vai funcionar, obvio.

Mas a minha duvida é se existe a possibilidade de que quando eu salvar o pedido, esse item que não foi salvo, seja salvo automaticamente.

4 respostas
solução!

Opa boa noite, tudo certo? tem a possibilidade sim, basta adicionar isso no seu @oneToMany.

@Entity
public class Pedido {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @OneToMany(cascade = CascadeType.ALL)
    private List<Item> itens;
}

colocando esse código ai.

@OneToMany(cascade = CascadeType.ALL)

quer dizer que quando salvar o seu Pedido, automaticamente irá salvar os itens desse pedido, mesma coisa pra fazer um um delete, caso delete o pedido, os itens do pedido tbm irá ser deletado.

Boooom, isso gerou mais uma duvida, imagine a seguinte situação:

Após colocar o @OneToMany(cascade = CascadeType.ALL), na classe pedido, eu instanciar um pedido, adicionar 3 Itens na lista, e então salvar, beleza vai salvar certinho.

Mas o que acontece se em outro dia eu carregar esse pedido, e remover um item, e alterar outro item.

O que vai acontecer com o item removido, ele vai sair da tabela? E o alterado, ele vai fazer a alteração na tabela ou vai ser removido e adicionado outro com as informações atualizadas?

Opa, se vc remover o item, ele não vai fazer mais parte do pedido, é uma remoção normal, por exemplo, o pedido tem 3 itens, vc vai la e quer remover um dos 3, se vc remover 1 item, o pedido vai ficar com 2 item no relacionamento ainda, mesma coisa se vc remover 2 item, o pedido vai ficar com 1 item no relacionamento, caso vc quer alterar 1 item, esse item vai ter vai ser atualizado e vai ficar fazendo parte do relacionamento, mesma coisa se vc adicionar um outro item a esse pedido, ai o pedido vai ter 4 itens relacionado.

Muito Obrigado !

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software