I have this Entity to represent a Category system with a selfrelationship to get child categories:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "codigo_categoria")
private Long codigoCategoria;
@Column(unique = true)
private String nombre;
private String descripcion;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "codigo_categoria_padre")
@JsonBackReference
private Categoria categoriaPadre;
@OneToMany(mappedBy = "categoriaPadre", fetch = FetchType.EAGER, cascade = CascadeType.REMOVE, orphanRemoval = true)
private List<CategoriaExtends> categoriasHijas;
The problem is when I want to delete a category that has child categories. I want to delete all child categories but Java drops me this exception :
Cannot delete or update a parent row: a foreign key constraint fails (
vanger
.producto
, CONSTRAINTFKju4fpj8umbyi05750yjm70cx0
FOREIGN KEY (codigo_categoria
) REFERENCEScategoria
(codigo_categoria
))
I tried to changing some things like orphanRemoval=true or cascade = CascadeType.REMOVE or trying to put the cascade in a separated annotation but is not working.
My last hope to get this on work is deleting category childs recursively manually, but is not the proper way.
Thanks in advance 🙂
Advertisement
Answer
You should show us how you delete a category but I think the problem is that you are not removing the category from both sides of the associations:
Categoria categoria =
// Remove association with children
for ( CategoriaExtends child : categoria.getCategoriasHijas() ) {
child.setCategoriaPadre(null);
}
categoria.getCategoriasHijas().clear();
entityManager.remove(categoria);