Estudando listas, me deparei com a seguinte situação que me travou. Possuo a entidade e o DTO e ambos possuem uma lista de itens: Nota:
@JsonManagedReference
@OneToMany(fetch = FetchType.EAGER, mappedBy = "nota", cascade = CascadeType.PERSIST)
private List<Itens> itens;
Itens:
@JsonBackReference
@ManyToOne(fetch = FetchType.LAZY)
private Nota nota;
NotaDto:
public class NotaDTO {
private List<Itens> itens;
Além disso possuo um respository onde eu busco a lista de todos os itens que ja existem na nota:
@Query("select i from Itens i where nota = :id")
List<Itens> findAllByIdItens(Nota id);
Eu quero atualizar essa lista do meu banco de dados de forma que compare os itens se ja existem ou não com o que eu recebo do DTO. Caso existir somente atualizo algumas informações, caso não exista no DTO eu irei excluir do banco de dados. Seria algo assim:
public void atualizar(NotaDTO dto) {
Nota nota = repository.getReferenceById(dto.getId());
List<Itens> list = itensRepository.findAllByIdItens(nota);
for (Itens item : dto.getItens()) {
if (list == dto.getItens()) {
//Apenas vou atualizar os valores dos itens (como a quantidade por exemplo)
} else {
//Como ele não existe (supondo que o usuário removeu o item) quero excluir do do banco de dados
itensrepository.deleteById(item.getId());
}
}
}
A título de informação, o JSON que é o meu DTO estou enviando assim:
{
"id": 15,
"itens":[
{
"id": 45,
"produto": 1,
"quantidade": 2
},
{
"id": 46,
"produto": 2,
"quantidade": 2
},
{
"id": 47,
"produto": 3,
"quantidade": 1
}
]
}
O que possuo no banco de dados esta assim:
No caso eu quero excluir do banco de dados o item de ID 48.