Hibernate removendo da lista mas não persiste

5 respostas
jpahibernate
M

Boa tarde.
Estou com um problema (dúvida) que não estou conseguindo achar solução.

Tenho uma tela de pedidos, onde são inseridos itens. Organizados em 3 classes, sendo:

Pedido (classe criada pelo hibernate)
-> Item Pedido (classe criada pelo hibernate)
-> Produto (view criada no banco)

Eu consigo salvar pedido com itens normalmente, altero o pai tranquilo. Porém não consigo excluir itens, na realidade eu até excluo, ele mostra no front que foi excluído, porém não persiste no banco de dados.

Estou usando o merge(entidade). Segue minhas classes:

PEDIDO:

@OneToMany(mappedBy = "pedido", cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
	private List<ItemPedido> itens = new ArrayList<ItemPedido>();

ITEM PEDIDO

@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "produto_fk",nullable = false)
	private VIEW_PRODUTOS produto;

Quando dou o merge, recebo o erro:

Caused by: java.sql.SQLIntegrityConstraintViolationException: ORA-02292: restrição de integridade (BANCO.FKNOSWMQL1N8YVP43QOPRWKXBJV) violada - registro filho localizado.

Percebi que o hibernate tenta excluir todos os itens:

Hibernate: 
    delete 
    from
        TABELA_ITEM 
    where
        id=?

Como posso fazer para ele excluir somente o item que o usuário removeu?

Método remover:

public void removeLinha(int linha) {
		if (linha > 0) {
			this.OBJETO.getItens().remove(linha);
			qtdeItem--;
		}
		recalcularValores(OBJETO);
	}

Nesse processo, ele remove, mostra pro usuario que removeu. Porém quando salvo, dá erro de persistência.

Alguém pode me dar uma luz?

5 Respostas

D

Esse erro indica que você está tentando excluir um item de uma tabela A que está relacionado a um ou mais itens da tabela B de forma que B referencia um item de A.

M

No caso, Tenho um pedido para varios Itens.
Esses itens tem relacionamento com umas informações de produtos (view).

@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "produto_fk",nullable = false)
	private VIEW_PRODUTOS produto;

Tem alguma sugestão que posso testar? Ou que estou fazendo errado?

Pq ele está dando violação de chave, tentando excluir algo que não pode.

D

Cara, eu entendo que o item_produto é uma tabela de relacionamento que surge a partir da relação de muitos para muitos entre pedido e produto (cada pedido pode ter nenhum ou vários produtos e cada produto pode estar em nenhum ou vários pedidos).
Assim sendo, é item pedido que recebe as FKs de ambas as tabelas. Logo, excluir dela não deveria causar este tipo de problema.

Ps:

Por que essa classe tem esse nome desse jeito?

M

Bom dia.
Na vdd não se chama assim, só mascarei pra colocar no fórum, mas ela é uma view do banco de dados.

Vou fazer mais testes.

J

Tem que postar o script dessa fk (BANCO.FKNOSWMQL1N8YVP43QOPRWKXBJV)

Criado 27 de setembro de 2019
Ultima resposta 28 de set. de 2019
Respostas 5
Participantes 3