1
resposta

Desafio: hora da prática

1 - Relacione Categoria e Produto usando @OneToMany, permitindo que uma categoria tenha vários produtos. Assim, estamos definindo um relacionamento 1:n do lado da categoria. Aqui, ao salvarmos uma categoria, queremos salvar seus produtos automaticamente também. Faça a configuração necessária para atender a esse requisito.

package br.com.alura.gerenciador_pedidos.model;

import jakarta.persistence.CascadeType;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.OneToMany;

import java.util.List;

@Entity
public class Categoria {

    @Id
    private Long id;
    private String nome;

    @OneToMany(mappedBy = "categoria", cascade = CascadeType.ALL)
    private List<Produto> produtos;

    public Categoria() {
    }

    public Categoria(Long id, String nome) {
        this.id = id;
        this.nome = nome;
    }

    public Long getId() {
        return id;
    }

    public String getNome() {
        return nome;
    }

    public List<Produto> getProdutos() {
        return produtos;
    }
}

2 - Repare que o relacionamento criado é unidirecional: somente a classe Categoria o enxerga. Podemos deixá-lo bidirecional, configurando um relacionamento do tipo n:1 do lado do Produto, com a anotação @ManyToOne.

package br.com.alura.gerenciador_pedidos.model;

import jakarta.persistence.*;

@Entity
public class Produto {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne
    @JoinColumn(name = "categoria_id")
    private Categoria categoria;

    @Column(nullable = false, unique = true)
    private String nome;
    @Column(name = "valor")
    private Double preco;

    public Produto() {
    }

    public Produto(Categoria categoria, String nome, Double preco) {
        this.categoria = categoria;
        this.nome = nome;
        this.preco = preco;
    }

    public Long getId() {
        return id;
    }

    public String getNome() {
        return nome;
    }

    public Double getPreco() {
        return preco;
    }
}
1 resposta

Olá Harlen!

Parece que você está no caminho certo para configurar o relacionamento entre Categoria e Produto usando o Spring Data JPA. Vamos ver como podemos atender aos requisitos que você mencionou.

Você configurou corretamente o relacionamento @OneToMany na classe Categoria, adicionou a anotação cascade = CascadeType.ALL garante que ao salvar uma Categoria, todos os seus Produtos associados também serão salvos automaticamente.

Na classe Produto, o relacionamento @ManyToOne também foi configurado corretamente.

Continue assim e bons estudos!