这是我的实体:
@Entity
@Table(name = "item_pedido")
public class ProdutoPedido {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(cascade = {CascadeType.ALL})
@JoinColumn(name = "produto_id")
private Produto produto;
@ManyToOne(cascade = {CascadeType.ALL})
@JoinColumn(name = "pedido_id")
private Pedido pedido;
private int quantidade;
// getters and setters omitted
}
存储库:
public interface ProdutoPedidoRepository extends CrudRepository<ProdutoPedido, Long> {
}
以及控制器的保存方法:
@PostMapping("/itensdevendas")
public ProdutoPedido salvarProdutoPedido(@RequestBody ProdutoPedido produtoPedido) {
return produtoPedidoRepository.save(produtoPedido);
}
邮递员的电话:
{
"quantidade":33,
"pedido_id":1,
"produto_id":4
}
但是,只有quantidade
和id
属性是完整的。
没有保存属性pedido_id
和produto_id
怎么了?
答案 0 :(得分:0)
您的实体ProdutoPedido
有Produto
个对象。
如果您为产品传递1,它将不会被映射,并且值将保持为空。
注意:我假设Produto和Pedido的数据已经存在1和4。
您可以尝试2种方法
第一
假设Produto
和Pedido
对象具有“ id”字段,请将UI的JSON更改为类似的内容。
希望它将转换为Produto和Pedido对象。
通过使用控制器方法打印进行确认。
{
"quantidade":33,
"pedido_id": { "id" : 1 },
"produto_id": { "id" : 4 }
}
第二:
您需要添加这样的DTO并将其用于UI映射。
ProdutoPedidoDTO {
private Long id;
private int produto;
private int pedido;
private int quantidade;
}
@PostMapping("/itensdevendas")
public ProdutoPedidoDTO salvarProdutoPedido(@RequestBody ProdutoPedidoDTO produtoPedido) {
ProdutoPedido prodPedido = new ProdutoPedido();
// add values
// add Produto obj to ProdutoPedido
Produto produto = new Produto();
produto.setId(produtoPedido.getProduto()):
prodPedido.setProduto(produto);
// do same for Pedido
return produtoPedidoRepository.save(prodPedido);
}
答案 1 :(得分:0)
我欠你一杯啤酒。它进行了一些修改。我在这里列出它们:
不需要ProdutoPedidoDTO的id属性。
此外,我不得不将方法“ salvar”的返回类型从ProdutoPedidoDTO更改为ProdutoPedido。
@PostMapping("/itensdevendas")
public ProdutoPedido salvarProdutoPedido(@RequestBody ProdutoPedidoDTO produtoPedidoDTO) {
ProdutoPedido prodPedido = new ProdutoPedido();
// add values
System.out.println("Primeiro: " + produtoPedidoDTO.getProduto());
// add Produto obj to ProdutoPedido
Produto produto = new Produto();
//produto.setId(produtoPedidoDTO.getProduto());
produto = produtoRepository.findById(produtoPedidoDTO.getProduto()).get();
prodPedido.setProduto(produto);
System.out.println("Segundo: " + produtoPedidoDTO.getPedido());
// do same for Pedido
Pedido pedido = new Pedido();
// pedido.setId(produtoPedidoDTO.getPedido());
pedido = pedidoRepository.findById(produtoPedidoDTO.getPedido()).get();
prodPedido.setPedido(pedido);
prodPedido.setQuantidade(produtoPedidoDTO.getQuantidade());
return produtoPedidoRepository.save(prodPedido);
}
最后,这是Post调用的样子:
{
"quantidade":66,
"pedido":1,
"produto":3
}
谢谢您的投入。