Neste artigo, vamos acompanhar a implementação apresentada no vídeo (https://youtu.be/vr2_rCtbOQI), onde construímos a entidade Produto e estabelecemos um relacionamento do tipo ManyToOne com a entidade Categoria, utilizando Spring Boot e JPA (Hibernate).

Esse é um passo essencial para projetos reais, onde objetos do mundo real são interligados, como por exemplo: produtos que pertencem a categorias.


Entendendo o problema

Queremos representar no banco de dados que vários produtos podem pertencer a uma única categoria. Isso é um clássico exemplo de relacionamento muitos-para-um (ManyToOne).


Implementando a entidade Produto

@Entity
@Table(name = "produto")
public class Produto {

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

    private String nome;
    private Double preco;

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

    // Construtores, getters, setters, equals e hashCode omitidos para brevidade
}

Explicando as anotações:

  • @Entity: indica que essa classe será mapeada como uma tabela no banco de dados.
  • @Table(name = "produto"): define explicitamente o nome da tabela.
  • @Id: define a chave primária.
  • @GeneratedValue: indica que o valor da chave será gerado automaticamente pelo banco.
  • @ManyToOne: define o relacionamento muitos-para-um.
  • @JoinColumn(name = "categoria_id"): especifica o nome da coluna que será usada como chave estrangeira.

Resultado no banco de dados

A tabela produto conterá, além das colunas id, nome e preco, uma coluna adicional chamada categoria_id, que armazena o identificador da categoria relacionada.

CREATE TABLE produto (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    nome VARCHAR(255),
    preco DOUBLE,
    categoria_id BIGINT,
    FOREIGN KEY (categoria_id) REFERENCES categoria(id)
);

Dicas importantes para projetos reais

  • Caso você esteja expondo a entidade diretamente em um endpoint (sem DTO), o relacionamento com Categoria pode causar problema de recursão infinita durante a serialização JSON.
  • Para isso, você pode utilizar:
    • @JsonIgnoreProperties("produtos") do lado da Categoria
    • Ou trabalhar com DTOs que controlam exatamente o que vai para o cliente.

Conclusão

Neste artigo, construímos um relacionamento simples mas muito importante entre Produto e Categoria, usando @ManyToOne com JPA. Esse tipo de relação é essencial para modelar dados em aplicações reais, e com o Spring Boot tudo isso pode ser feito de forma simples e elegante.

No próximo artigo, vamos explorar como criar os endpoints REST para listar, salvar e buscar produtos com suas categorias. Vamos juntos! 🚀

Categorized in:

Spring Boot, SQL,