0
Hello, I’m trying to create a relationship where there is an intermediary table that has fields other than foreign keys. My classes are like this:
@Entity
public class Pedido {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "idpedido")
private Long idPedido;
private Long numero;
@Column(name = "datapedido")
private OffsetDateTime dataPedido;
@ManyToOne
@JoinColumn(name = "idcliente")
private Cliente cliente;
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name = "PedidoProduto", joinColumns = @JoinColumn(name = "idpedido"), inverseJoinColumns = @JoinColumn(name = "idproduto"))
private List<PedidoProduto> produtos = new ArrayList<>();
//getter e setter omitidos
}
@Entity
public class Produto {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "idproduto")
private Long idProduto;
private String codigo;
private String descricao;
private Double preco;
//getter e setter omitidos
}
@Entity
@Table(name = "pedidoproduto")
public class PedidoProduto {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "idpedidoproduto")
private Long idPedidoProduto;
@JsonIgnore
@ManyToOne
@JoinColumn(name = "idpedido")
private Pedido pedido;
@ManyToOne
@JoinColumn(name = "idproduto")
private Produto produto;
private Long quantidade;
//getter e setter omitidos
}
My controller:
@RestController
@RequestMapping("/pedidos")
public class PedidoController {
@Autowired
private PedidoRepository pedidoRepository;
@Autowired
private ProdutoRepository produtoRepository;
@Autowired
private ClienteRepository clienteRepository;
@Autowired
private PedidoProdutoRepository pedidoProdutoRepository;
@GetMapping
public List<Pedido> listar() {
return pedidoRepository.findAll();
}
@PostMapping
public Pedido adicionarPedido(@RequestBody Pedido pedido) {
List<PedidoProduto> temp = new ArrayList<>();
Cliente cliente = clienteRepository.save(pedido.getCliente());
for(PedidoProduto pedidoproduto: pedido.getProdutos()) {
Produto produto = produtoRepository.save(pedidoproduto.getProduto());
pedidoproduto.setProduto(produto);
temp.add(pedidoproduto);
}
pedido.setCliente(cliente);
pedido.setProdutos(temp);
return pedidoRepository.save(pedido);
}
}
If I enter directly into the bank with you list the order information with customer and the products with their quantities, but when I enter I get the error saying that I can not insert null idpedido in pedidoproduto. JSON I’m trying to save via Postman.
{
"numero": 100,
"dataPedido": "2021-03-22T21:00:00-03:00",
"cliente": {
"razaoSocial": "comercio de bebidas jacarezinho ltda",
"cnpj": "0000012345678",
"telefone": "123456789",
"email": "[email protected]"
},
"produtos": [
{
"produto": {
"codigo": "PPTS7",
"descricao": "pano de prato semaninha 7x15",
"preco": 12.5
},
"quantidade": 10
}
]
}
How do I have an intermediate table that contains other fields, and enables all crud operations?