Tenho uma classe de itens e outra de nota fiscal. Acontece que quando quero alterar a nota fiscal, ao invés de somente atualizar os seus itens, está sendo salvando novamente todos eles ao invés de atualizar.
Exemplo: Salvei dois itens na minha nota fiscal e desejo alterar a quantidade. Quando atualizo esta sendo inserida novamente a lista com os mesmos dois itens com a alteração ao invés de atualizar.
Minha classe 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;
@JsonManagedReference
@OneToMany(fetch = FetchType.EAGER, mappedBy = "nota", cascade = CascadeType.ALL)
private List<Itens> itens;
private Integer numero;
private Date data;
private BigDecimal valor_total;
Minha classe 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;
@JsonBackReference
@ManyToOne(fetch = FetchType.LAZY)
private Nota nota;
private Integer ordenacao;
private BigDecimal quantidade;
private BigDecimal valor_total;
Meu método de atualizar os itens:
public void atualizar(NotaDTO dto) {
Nota nota = repository.getReferenceById(dto.getId());
if (!repository.existsById(dto.getId())) {
throw new ValidacaoException("A nota fiscal informada não existe.");
} else {
int ordenacao = itensRepository.findByUltimaOrdencao(nota);
BigDecimal somaTotal = BigDecimal.ZERO;
for (Itens item : dto.getItens()) {
item.setOrdenacao(ordenacao++);
Long valorUnitario = produtoRepository.findByValorUnitarioProduto(item.getProduto().getId());
item.setValor_total(item.getQuantidade().multiply(BigDecimal.valueOf(valorUnitario)));
somaTotal = somaTotal.add(item.getValor_total());
item.setNota(nota);
}
nota.setValor_total(somaTotal);
nota.atualizar(dto);
}
}
Dentro da classe nota o método atualizar:
public void atualizar(NotaDTO dto) {
if (dto.getCliente() != null) {
this.cliente = new Cliente(new ClienteDTO());
}
if (dto.getItens() != null) {
this.itens = dto.getItens();
}
if (dto.getData() != null) {
this.data = dto.getData();
}
if (dto.getValor_total() != null) {
this.valor_total = dto.getValor_total();
}
}
Alguém poderia me explicar o porque disto estar acontecendo?