1
resposta

Tabela que relaciona ID de produto e ID de marca - Java

Projeto CRUD

Product Model:

package com.example.springboot.models;

import jakarta.persistence.*;
import org.springframework.hateoas.RepresentationModel;

import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.UUID;

@Entity
@Table(name = "TB_PRODUCTS")
public class ProductModel extends RepresentationModel<ProductModel> implements Serializable {
    @Serial
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private UUID idProduct;
    private String name;
    private BigDecimal value;
    @ManyToOne
    @JoinColumn(name = "brand_id", referencedColumnName = "idBrand")
    private BrandModel brand;

    public UUID getIdProduct() {
        return idProduct;
    }

    public void setIdProduct(UUID idProduct) {
        this.idProduct = idProduct;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public BigDecimal getValue() {
        return value;
    }

    public void setValue(BigDecimal value) {
        this.value = value;
    }

    public BrandModel getBrand() {
        return brand;
    }

    public void setBrand(BrandModel brand) {
        this.brand = brand;
    }
}

Brand Model:


import jakarta.persistence.*;

import java.io.Serial;
import java.io.Serializable;
import java.util.List;
import java.util.UUID;

@Entity
@Table(name = "TB_BRANDS")
public class BrandModel implements Serializable {
    @Serial
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private UUID idBrand;
    private String name;
    @OneToMany(mappedBy = "brand", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<ProductModel> products;
    public BrandModel() {
    }

    public BrandModel(String name) {
        this.name = name;
    }

    public UUID getIdBrand() {
        return idBrand;
    }

    public void setIdBrand(UUID idBrand) {
        this.idBrand = idBrand;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeTudo está funcionando, apenas a tabela que relaciona id da marca e id do produto nao está cadastrando nada. Como posso resolver? Acredito q utilizei a anotacao @OneToMany ou @ManyToOne de forma errada.

1 resposta

E aí, Vinícius, tudo tranquilo?

Dando uma olhada nos modelos ProductModel e BrandModel que você mandou, vi que você usou as anotações JPA @ManyToOne no ProductModel e @OneToMany no BrandModel. Isso aí tá certo para criar uma relação entre esses dois modelos.

Dá uma olhada em algumas dicas e soluções para o que tá rolando:

  1. Relacionamento em Dois Sentidos:

    • Quando temos essa parada de dois lados no relacionamento, é bom garantir que tudo esteja batendo. Se você coloca um produto em uma marca, certifique-se de também ligar essa marca ao produto.
  2. Cascata e OrphanRemoval:

    • Você ativou a cascata e o orphanRemoval no @OneToMany do BrandModel. Isso é legal se você quer, por exemplo, apagar todos os produtos quando deletar uma marca. Só confirma se isso é o que você quer mesmo.
  3. Salvando a Parada:

    • Na hora de salvar ou atualizar um ProductModel, se liga pra garantir que a BrandModel esteja na jogada.

Olha só um exemplo básico de como fazer isso:

// Cria uma marca nova
BrandModel brand = new BrandModel("Marca XYZ");
brandRepository.save(brand);

// Cria um produto novo
ProductModel product = new ProductModel();
product.setName("Produto A");
product.setValue(new BigDecimal("100.00"));
product.setBrand(brand); // Liga a marca ao produto

// Salva o produto
productRepository.save(product);

Tenta seguir mais ou menos assim quando estiver mexendo nos seus ProductModel e BrandModel.

  1. Dá um Confere no Banco:

    • Além de ver o código, dá uma olhada no banco pra ver se tá tudo nos conformes, tipo se as chaves estrangeiras tão certinhas na tabela do ProductModel.
  2. Logs e Debug:

    • Se continuar dando ruim, mete uns logs no código pra acompanhar o que tá rolando. Debugar também ajuda a entender onde pode estar o problema.

Então, se liga na sincronização entre ProductModel e BrandModel, ajusta as coisas certinho e vê se o banco tá de boa.