[Resolvido] Erro ao deletar

6 respostas
desk
Olá, tenho 2 tabelas no banco.. 1 Produto, outra Categoria.. produto guarda o id da categoria. Na hora de eu deletar tá dando esse erro aqui:
java.sql.BatchUpdateException: Cannot delete or update a parent row: a foreign key constraint fails (`dblop`.`Produto`, CONSTRAINT `FK50C666D9839D162` FOREIGN KEY (`categoria_id`) REFERENCES `Categoria` (`id`))
Minha classe produto:
@Entity
public class Produto {
    @Id
    @GeneratedValue
    private Long id ;
    @ManyToOne(cascade = CascadeType.ALL, fetch=FetchType.EAGER)
    private Categoria categoria ;
    private String nome ;
    private String descricao ;
    private String cor ;
    private Double preco ;
// getters and setters
DAO:
public void remove(T t) {
        EntityManager em = new JPAUtil().getEntityManager();
        em.getTransaction().begin();

        em.remove(em.merge(t));

        em.getTransaction().commit();
        em.close();
    }

Gostaria de saber pq tá dando esse erro, e como faço para deletar algo dessa tabela com esse relacionamento?

Grato!

6 Respostas

T

Justamente por causa FK …

desk

thiagomoraes:
Justamente por causa FK …


Por causa do id de categoria que guardo em minha tabela produto?? qual seria a solução?
Desculpe mas so iniciante ainda em persistencia

davidbuzatto

desk,

Você não pode apagar um registro que está sendo usado em outro registro entendeu?
Como que você vai apagar uma categoria, sendo que um produto está utilizando esta categoria?

Se você quer mesmo apagá-la, vc vai ter que mudar o tipo de restrição referencial do relacionamento.
Por padrão a restrição referencial usada é a RESTRICT.

[]´s

mitgan

Bom, deve estar ocorrendo o erro devido a integridade referencial. Como foi dito, não se pode apagar uma categoria sem antes apagar (ou trocar para outra categoria) todos os produtos que contenham a categoria em questão.

H

Dessa forma você consegue remover a entidade produto.

@ManyToOne(fetch=FetchType.EAGER
@JoinColumn(name="id_categoria")
private Categoria categoria ;

Espero ter ajudado.

desk

Aah entendi… Brigadão galera!!!

Criado 15 de outubro de 2010
Ultima resposta 17 de out. de 2010
Respostas 6
Participantes 5