Ola, alguém pode me ajudar?
Como faço para passar o id da outra classe? sendo que no banco eu criei o campo categoria_id! Na classe DTO eu mando um Long categoria_id
Ola, alguém pode me ajudar?
Como faço para passar o id da outra classe? sendo que no banco eu criei o campo categoria_id! Na classe DTO eu mando um Long categoria_id
Oi André!
Você vai precisar carregar a categoria pelo id no banco de dados e passar como parâmetro para o construtor. Algo como:
public Produto(CadastrarProdutoDTO dados, Categoria categoria) {
this.nome = dados.nome();
this.descricao = dados.descricao();
this.preco = dados.preco();
this.categoria = categoria;
}
Valeu Rodrigo! mas ainda não ficou claro,
minha tabela esta criado o campo categoria_id, onde eu envio pelo json certo?
{ "nome":"Pe de cabra ", "descricao":"Material feito em aço de carbono 35X20", "preco": 129.90, "categoria_id":2 }
porem na minha class Produto esse atributo não tem certo?
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nome;
private String descricao;
private Double preco;
@ManyToOne
private Categoria categoria;
Como ele vai receber esse id vai receber ?
a minha DTO esta assim:
public record CadastrarProdutoDTO(String nome, String descricao, Double preco, Long categoria_id) {
}
ele imprime no console certo mas não grava no banco. o campo categoria_id se puder me orientar ainda acho que é JPA, ou tenho que criar o campo categoria_id?
O JSON e o DTO estão corretos, pois eles terão apenas o id da categoria. Mas na entidade Produto
você precisa passar um objeto categoria "completo" e não apenas o id dela, precisando então carregar do banco de dados:
@PostMapping
@Transactional
public void cadastrar(@RequestBody @Valid CadastrarProdutoDTO dados) {
var categoria = categoriaRepository.getReferenceById(dados.categoria_id());
repository.save(new Produto(dados, categoria));
}