Problema para deletar, pai com FILHOS hibernate

699 views
Skip to first unread message

Chris Allen Barroso

unread,
Nov 6, 2013, 5:08:15 AM11/6/13
to Cejug
Bom dia pessoal,
Estou com uma duvida e não consigo sair dela.
Quero deletar um registro, porem o mesmo possui filhos.
Pelo que percebo ele não aceita delatar.
Como estou usando hibernete, pesquisei e vi algumas pessoas informando que preciso definir no meu relacionamento no modelo 

  @OneToMany(cascade ={CascadeType.ALL,CascadeType.REMOVE} , fetch = FetchType.LAZY, mappedBy = "camAtestado")
    public Set getCamAtestadoAgradadoFamiliars() {
        return this.camAtestadoAgradadoFamiliars;
    }

porem isso tb não esta funcionando. 
Alguem sabe qual o problema? 


--
Chris Allen Barroso
Analista de Sistemas | Desenvolvedor Java  
Ministério de Planos e Finanças 
@Chravent

Clairton

unread,
Nov 6, 2013, 5:20:25 AM11/6/13
to ce...@googlegroups.com, Cejug
Na criação da tabela você deve ter definido uma ou mais constraints foreign key sendo assim você deve deletar os filhos primeiro e depois deletar o pai. Caso você n queira q os filhos seja removido da base de dados basta atualizar o pai definindo o valor dos filho como nula e depois deleta que funcionará. 

Atenciosamente Clairton Luz
--
Você está recebendo esta mensagem porque se inscreveu no grupo "CEJUG" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para cejug+un...@googlegroups.com.
Para postar neste grupo, envie um e-mail para ce...@googlegroups.com.
Visite este grupo em http://groups.google.com/group/cejug.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.

Chris Allen Barroso

unread,
Nov 6, 2013, 5:34:49 AM11/6/13
to Cejug
Clairton, quero sim que os filhos sejam removidos.
Então devo fazer a logica para deletar primeiro o os filho e depois o pai.
Então não tem nenhuma anotação no hibernaste que faça isso automaticamente? 


--
Chris Allen Barroso
Analista de Sistemas | Desenvolvedor Java  
Ministério de Planos e Finanças 
@Chravent




CC: ce...@googlegroups.com
From: clairt...@gmail.com
Subject: Re: [CEJUG] Problema para deletar, pai com FILHOS hibernate
Date: Wed, 6 Nov 2013 07:20:25 -0300
To: ce...@googlegroups.com

Clairton Carneiro Luz

unread,
Nov 6, 2013, 5:39:36 AM11/6/13
to ce...@googlegroups.com
me informa uma coisa seu banco foi criado por você ou gerrado pelo JPA?


Atenciosamente

 

    Técnico em Computadores e Redes

    Cursando: Analise e Desenvolvimento de Sistemas

    Contatos para suporte de computadores e redes

    Twitter: @ClairtonLuz

    Instagram: clairtoncl

    FanPage: http://www.facebook.com.br/CCSoftTecnologia

    Fone: (85) 9951-4558  -  (85) 8758-9380



2013/11/6 Chris Allen Barroso <barros...@hotmail.com>

Jeandeson O. Merelis

unread,
Nov 6, 2013, 5:51:27 AM11/6/13
to ce...@googlegroups.com
Se estiver usando o JPA, informe a propriedada "orphanRemoval=true"

@OneToMany(cascade = CascadeType.ALL, mappedBy = "camAtestado", orphanRemoval = true)



2013/11/6 Chris Allen Barroso <barros...@hotmail.com>
Clairton, quero sim que os filhos sejam removidos.



--
Jeandeson O. Merelis

Chris Allen Barroso

unread,
Nov 6, 2013, 5:57:06 AM11/6/13
to Cejug

Foi criado por mi no mysql. o Modelo é que foi gerado automaticamente pelo netbeans.
Estou usando o Hibernate Jean


--
Chris Allen Barroso
Analista de Sistemas | Desenvolvedor Java  
Ministério de Planos e Finanças 
@Chravent




Date: Wed, 6 Nov 2013 08:51:27 -0200

Subject: Re: [CEJUG] Problema para deletar, pai com FILHOS hibernate

Chris Allen Barroso

unread,
Nov 6, 2013, 1:56:28 PM11/6/13
to Cejug
Pessoal, 
Depois de algumas pesquisas e ajudar de colegas, consegui resolver o problema.
Postando para quem sabe ajudar os outros que tenham o mesmo problema. 

Usei o 
@ManyToOne(fetch = FetchType.LAZY,cascade =CascadeType.MERGE) 
nas chaves estrangeiras do filho e no pai tive que definir assim:
@OneToMany(cascade=CascadeType.MERGE, fetch=FetchType.LAZY,  mappedBy = "camAtestado", targetEntity =CamAtestadoDeclaracao.class )

Aonde o CamAtestadoDelaracao é a minha classe filho.

Também tive que fazer alterações a propriedade. Nas tabelas filhos no campo FK define opção para on Delete:Cascade

Porque: Porque meu projeto não esta definido para o hibernate fazer isso automaticamente. 

Mas uma vez, obrigado a todos. 




--
Chris Allen Barroso
Analista de Sistemas | Desenvolvedor Java  
Ministério de Planos e Finanças 
@Chravent




From: barros...@hotmail.com
To: ce...@googlegroups.com
Subject: RE: [CEJUG] Problema para deletar, pai com FILHOS hibernate
Date: Wed, 6 Nov 2013 10:57:06 +0000

Ythalo Rossy

unread,
Nov 7, 2013, 7:38:38 PM11/7/13
to ce...@googlegroups.com
Uma dúvida, você chegou a testar utilizando o 
@OneToMany(cascade = CascadeType.ALL, mappedBy = "camAtestado", orphanRemoval = true)

Se sim, qual foi o resultado??
--
Ythalo Rossy Saldanha Lira
Analista de Sistemas 4
Sefaz Ce - Cesinf - NFe

Sun Certified Programmer for Java
http://yross.wordpress.com
http://about.me/ythalorossy

Chris Allen Barroso

unread,
Nov 12, 2013, 1:47:55 PM11/12/13
to Cejug
Chris Allen Barroso
Analista de Sistemas | Desenvolvedor Java  
Ministério de Planos e Finanças 
@Chravent




Date: Thu, 7 Nov 2013 22:38:38 -0200

Subject: Re: [CEJUG] Problema para deletar, pai com FILHOS hibernate

Ythalo Rossy

unread,
Nov 13, 2013, 8:04:29 AM11/13/13
to ce...@googlegroups.com
Que bom que deu certinho.

Bom que fica a dica para os colega.

T+


2013/11/12 Chris Allen Barroso <barros...@hotmail.com>

Chris Allen Barroso

unread,
Nov 14, 2013, 3:34:11 AM11/14/13
to Cejug
Agora é assim,
Alem disso eu fiz mas algumas alterações no banco.
Nas chaves estrangeiras coloquei cascade delete. 



--
Chris Allen Barroso
Analista de Sistemas | Desenvolvedor Java  
Ministério de Planos e Finanças 
@Chravent




Date: Wed, 13 Nov 2013 11:04:29 -0200
Subject: Re: [CEJUG] (Feedback Ythalo Rossy)
From: ythal...@gmail.com
To: ce...@googlegroups.com

Paulo Jr.

unread,
Nov 14, 2013, 12:33:26 PM11/14/13
to ce...@googlegroups.com
kkkkkkkkkkkkkkkkkkk....

Ai lascou tudo. Se você colocou cascade direto no banco, não precisa de nenhuma configuração do Hibernate :) o banco que faz isso.

Colocar a conf no hibernate é uma forma de abstrair o banco.





2013/11/14 Chris Allen Barroso <barros...@hotmail.com>



--
Paulo A. Junior
Analista de Sistemas
JugLeader CEJUG
Skype: paulojribp

Paulo Jr.

unread,
Nov 14, 2013, 12:35:36 PM11/14/13
to ce...@googlegroups.com
Ops.. enviei antes do que queria...

Assim, é capaz do banco está fazendo o que você precisa e não de fato o Hibernate. :)

hehehehe.. Tente verificar cada variável individualmente. (Tirar os cascades do banco e testar) para ter certeza. Ou então, se já resolveu o problema e já foi para próximo, que a vida continue :D

Abraço, e de qualquer forma valeu por compartilhar


2013/11/14 Paulo Jr. <paulo...@gmail.com>

Chris Allen Barroso

unread,
Nov 14, 2013, 3:15:06 PM11/14/13
to Cejug

OI,
Farei sim os testes. 
Se realmente o banco esta fazendo tudo, tenho q ver uma forma de deixar isso por conta do hibernate. 
Darei o feedback


--
Chris Allen Barroso
Analista de Sistemas | Desenvolvedor Java  
Ministério de Planos e Finanças 
@Chravent




Date: Thu, 14 Nov 2013 15:35:36 -0200

Subject: Re: [CEJUG] (Feedback Ythalo Rossy)

Chris Allen Barroso

unread,
Nov 15, 2013, 4:40:47 AM11/15/13
to Cejug
Realmente fiz o teste e retorna erro ao deletar o pai:
Removi as definições do banco  cascade no action

Com essas definições no pai:
 @OneToMany(cascade = CascadeType.ALL, mappedBy = "camAtestado", orphanRemoval = true)
    public Set getCamAtestadoDeclaracaos() {
        return this.camAtestadoDeclaracaos;
    }


Assim no filho:

@ManyToOne(fetch = FetchType.LAZY,cascade =CascadeType.MERGE)
    @JoinColumn(name="cam_atestado_cam_atestado_num_id", nullable=false)
    public CamAtestado getCamAtestado() {
        return this.camAtestado;
    }

Erro


WARNING: SQL Error: 1451, SQLState: 23000
SEVERE: Cannot delete or update a parent row: a foreign key constraint fails (`dbd_cam_atestado4`.`cam_atestado_agradado_familiar`, CONSTRAINT `fk_cam_atestado_agradado_familiar_cam_atestado` FOREIGN KEY (`cam_atestado_cam_atestado_num_id`) REFERENCES `cam_atestado` (`c)
SEVERE: Could not synchronize database state with session


--
Chris Allen Barroso
Analista de Sistemas | Desenvolvedor Java  
Ministério de Planos e Finanças 
@Chravent



Subject: RE: [CEJUG] (Feedback Ythalo Rossy)
Date: Thu, 14 Nov 2013 20:15:06 +0000
Reply all
Reply to author
Forward
0 new messages