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 daCategoria
- 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! 🚀