Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Salvando dados - Relacionamento entre entidades

Professor, queria uma ajuda... Estou fazendo um exemplo para estudo. Tenho a entidade produto e compra. na entidade produto eu coloquei a compra, para eu saber que tais produtos seriam de determinada compra que o usuario fez. E em compra eu tenho uma lista de produtos.

O Relacionamento ficou assim.

Produto:

    @ManyToOne
    @JoinColumn(name = "id_compra")
    private Compra compra;

Compra:

@OneToMany(mappedBy = "compra")
    private List<Produto> produtos = new ArrayList<>();

Até ai tudo certo.

No banco na tabela Produtos ficoi assim:

id      nome      preco   quantidade  id_compra
'1', '   Arroz', ' 10.58',    5',        NULL
'2',    'Feijao', '14.87',    '3',       NULL

O que eu quero fazer ao salvar a compra e associar essa compra aos produtos. Ai que eu to apanhando kk

No controller fiz mais ou menos assim

 @PostMapping
    @Transactional
    public ResponseEntity<CompraDto> cadastrar(@RequestBody @Valid CompraForm form, UriComponentsBuilder uriBuilder) {
        Compra compra = form.converter(mercadoRepository, produtoRepository);
        compraRepository.save(compra);
        //Compra compraId = compraRepository.getOne(compra.getId());

        URI uri = uriBuilder.path("/compras/{id}").buildAndExpand(compra.getId()).toUri();
        return ResponseEntity.created(uri).body(new CompraDto(compra));
    }

No CompraForm

    public Compra converter(MercadoRepository mercadoRepository, ProdutoRepository produtoRepository) {
        Mercado mercado = mercadoRepository.findByNome(nomeMercado);
        List<Produto> produtos = produtoRepository.findAll();
        return new Compra(nome, valor, data, mercado, produtos);
    }

Pode me da algum norte professor, ia ser massa. Enquanto isso vou tentando, abraços.

1 resposta
solução!

Pessoal, foi bem simples, acho que já estava com muito sono rsrsr

@PostMapping
    @Transactional
    public ResponseEntity<CompraDto> cadastrar(@RequestBody @Valid CompraForm form, UriComponentsBuilder uriBuilder) {
        Compra compra = form.converter(mercadoRepository, produtoRepository);
        for (Produto produto : compra.getProdutos()) {
            produto.setCompra(compra);
        }
        compraRepository.save(compra);
        URI uri = uriBuilder.path("/compras/{id}").buildAndExpand(compra.getId()).toUri();
        return ResponseEntity.created(uri).body(new CompraDto(compra));
    }

Só precisei fazer esse for e colocar o Id da compra na coluna id_compra na tabela produto. Valeeu