这是我的实体:

@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
}


但是,只有quantidadeid属性是完整的。
没有保存属性pedido_idproduto_id怎么了?

最佳答案

您的实体ProdutoPedido具有Produto对象。

如果您将1传递给产品,它将不会被映射,并且值将保持为空。

注意:我假设Produto和Pedido的1和4数据已经存在。

您可以尝试2种方法

第一:

假设ProdutoPedido对象具有“ 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);
}

07-26 01:38