Qual a maneira correta de receber e persistir dados em tabelas com relacionamento Many to Many?
14/03/2019
0
Olá, usando Hibernate e Jersey, qual a forma correta de persistir dados quando o relacionamento for Muitos para Muitos e na tabela extra que faz relacionamento ter atributos a mais?
Por exemplo:
Pedido, Produto e PedidoProduto. Na tabela PedidoProduto terá que ter outros atributos como "Quantidade, Preço".
Fico no aguardo.
Desde já agradeço.
Por exemplo:
Pedido, Produto e PedidoProduto. Na tabela PedidoProduto terá que ter outros atributos como "Quantidade, Preço".
Fico no aguardo.
Desde já agradeço.
Antonio Junior
Curtir tópico
+ 0
Responder
Posts
14/06/2019
Paulo Carvalho
Olá, usando Hibernate e Jersey, qual a forma correta de persistir dados quando o relacionamento for Muitos para Muitos e na tabela extra que faz relacionamento ter atributos a mais?
Por exemplo:
Pedido, Produto e PedidoProduto. Na tabela PedidoProduto terá que ter outros atributos como "Quantidade, Preço".
Fico no aguardo.
Desde já agradeço.
Por exemplo:
Pedido, Produto e PedidoProduto. Na tabela PedidoProduto terá que ter outros atributos como "Quantidade, Preço".
Fico no aguardo.
Desde já agradeço.
Fala aí Antonio, tudo certo?
Então, neste caso de relacionamento ManyToMany eu costumo trabalhar com duas Collections, uma em cada classe do relacionamento, com a anotação @ManyToMany. Utilizando o Hibernate e a JPA com essa anotação nas duas classes, o próprio Hibernate se encarrega da criação da jointable, no seu caso a PedidoProduto. Não é necessário tem outros campos nessa terceira tabela porque a função dela é simplesmente armazenar a qual pedido determinado produto está atrelado, apenas isso. As informações de quantidade serão acessadas através da classe Pedido e as de preço na classe Produto.
Responder
14/06/2019
Antonio Junior
Olá, usando Hibernate e Jersey, qual a forma correta de persistir dados quando o relacionamento for Muitos para Muitos e na tabela extra que faz relacionamento ter atributos a mais?
Por exemplo:
Pedido, Produto e PedidoProduto. Na tabela PedidoProduto terá que ter outros atributos como "Quantidade, Preço".
Fico no aguardo.
Desde já agradeço.
Por exemplo:
Pedido, Produto e PedidoProduto. Na tabela PedidoProduto terá que ter outros atributos como "Quantidade, Preço".
Fico no aguardo.
Desde já agradeço.
Fala aí Antonio, tudo certo?
Então, neste caso de relacionamento ManyToMany eu costumo trabalhar com duas Collections, uma em cada classe do relacionamento, com a anotação @ManyToMany. Utilizando o Hibernate e a JPA com essa anotação nas duas classes, o próprio Hibernate se encarrega da criação da jointable, no seu caso a PedidoProduto. Não é necessário tem outros campos nessa terceira tabela porque a função dela é simplesmente armazenar a qual pedido determinado produto está atrelado, apenas isso. As informações de quantidade serão acessadas através da classe Pedido e as de preço na classe Produto.
Fala Paulo. Tudo certo e ai? Então Paulo na realidade o que acontece é o que eu citei acima. Por exemplo tenho a tabela produtos com os seus preços e tenho a tabela pedido que pode ter muitos produtos , se seguirmos a sua logica aconteceria o problema de que se eu mudar o valor produto, os pedidos que tiver os mesmo produtos terão alteração tbm, imagina que quando o pedido foi feito o produto x tem valor de R$10,00 ai depois de alguns dias teve um reajuste e no cadastro do produto foi atualizado para R$9,00 isso iria acarretar em discordâncias de dados, pois o pedidos que já foi lançado iria atualizar os valores. Então no meu ponto de vista tem que persistir o valor atual do produto e já tenho a solução para isso que é o seguinte:
//Na classe pedido @JsonIgnore @OneToMany( mappedBy = "pedido", cascade = CascadeType.ALL, orphanRemoval = true ) private List<PedidoProduto> pedidoProdutos = new ArrayList<>(); //Classe Produto @OneToMany( mappedBy = "produto", cascade = CascadeType.ALL, orphanRemoval = true ) private List<PedidoProduto> pedidoProdutos = new ArrayList<>(); //classe extra PedidoProduto @Id @ManyToOne private Pedido pedido; @Id @ManyToOne private Produto produto; @Column(name = "quantidade") private float qtde; private float preco;
Responder
Clique aqui para fazer login e interagir na Comunidade :)