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
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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));
}