Tenho duas classes e tabelas, itens e nota. Quando salvo a nota deverá também salvar os itens e referenciar nos itens qual a sua nota. As entidades estão assim:
Itens:
@Entity(name = "Itens")
@Table(name = "itens")
public class Itens {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_produto")
private Produto produto;
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Nota nota;
private Integer ordenacao; //Integer
private BigDecimal quantidade;
private BigDecimal valor_total;
Nota:
@Entity(name = "Nota")
@Table(name = "nota")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class Nota {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_cliente")
private Cliente cliente;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "nota", cascade = CascadeType.ALL)
private List<Itens> itens;
private Integer numero;
private Date data;
private BigDecimal valor_total;
O problema é que quando estou salvando a nota, o id dela não esta sendo inserido na tabela de itens. Esta ficando assim:
O meu método salvar esta assim:
public Nota salvar(NotaDTO dto) {
Nota nota = new Nota(dto);
if (dto.getCliente() == null) {
throw new ValidacaoException("É necessário informar um cliente .");
}
if (!clienteRepository.existsById(dto.getCliente().getId())) {
throw new ValidacaoException("O cliente informado não existe.");
}
Cliente cliente = clienteRepository.getReferenceById(dto.getCliente().getId());
Random random = new Random();
int numeroAleatorio = random.nextInt();
nota.setNumero(numeroAleatorio);
int ordenacao = 1;
BigDecimal somaTotal = BigDecimal.ZERO;
for (Itens item : dto.getItens()) {
item.setOrdenacao(ordenacao++);
Long valor = item.getProduto().getId();
Long valorUnitario = produtoRepository.findByValorUnitarioProduto(valor);
item.setValor_total(item.getQuantidade().multiply(BigDecimal.valueOf(valorUnitario)));
somaTotal = somaTotal.add(item.getValor_total());
}
nota.setValor_total(somaTotal);
nota = repository.save(nota);
return nota;
}
O que me deixou mais perdida foi que observando o console, os inserts na tabela de itens acontecem:
Alguém poderia me ajudar do porque o id da nota não está sendo inserido na tabela de itens?