Estou com o seguinte problema, para excluir um determinado registro de uma tabela (tabela1) preciso excluir outro em outra tabela (tabela2) que tem um FK com a tabela 1 então antes de exluir este registro executo um select na tabela 2 onde consta todos os registros que tem como referência ao registro que necessito deletar, deleto todos esses registros que retornaram da minha select e após isso deleto o registro da tabela 1. Ok isso funcionou IbExpert (utilizo firebird). Porém no JPA não da certo mesmo excluindo esses registros da tabela 2 quando tento executar o delete na tabela 1 ele ainda aponta erro de violation of FOREIGN KEY constraint. É como se o JPA não sinchoniza com o banco para ver que aqueles registros ja forão excluídos da tabela 2. Existe algum modo de forçar um sincronismo para permitir a exclusão desse item na tabela 1?
O JPA tem seus próprios recursos para deletar registros em varias tabelas, o famoso Cascade é bem eficiente.
Na entidade que possui a lista mapeada insira a linha abaixo:
O JPA tem seus próprios recursos para deletar registros em varias tabelas, o famoso Cascade é bem eficiente.
Na entidade que possui a lista mapeada insira a linha abaixo:
Na verdade vc deve colocar o relacionamento na outra entidade (da tabela 1)
Pq ao apagar os dados da tabela 1 vc deve disparar um evento em cascata na tabela 2
Att,
S
sciuba
magnocosta:
Na verdade vc deve colocar o relacionamento na outra entidade (da tabela 1)
Pq ao apagar os dados da tabela 1 vc deve disparar um evento em cascata na tabela 2
Att,
Magno segue o mapeamento da tabela 1 ( hoje dessa forma acontece o erro)
Lendo direito acho que entendi errado, heheheh, voce quer deletar um registro da tabela1, mas precisa primeiro deletar o registro da tabela2 certo ? é isso ?
S
sciuba
é isso mesmo!
R
rof20004
Nesse caso se tiver cascadeAll , basta chamar:
tabela1DAO.remove(tab1);
S
sciuba
rof20004:
Nesse caso se tiver cascadeAll , basta chamar:
tabela1DAO.remove(tab1);
O cascade All tb não rolou, porém consegui resolver de outra forma. Creio eu que não seja a mais elegante e correta mas atendeu oque eu precisava.
Após excluir os registros de referência da tabela2 utilizando .remove() do JPA, criei um metodo para excluir o registro que precisava na tabela1 e o chamo logo em sequência.
Segue metodo:
publicvoidexcluiRegistroAtividade(LongidAcdDiscipConteudoItem){StringsqlQuery="delete from Acd_DiscipConteudoItem ad where ad.id_acd_discipconteudoitem = :idAcdDiscipConteudoItem ";Queryq=acdDiscipconteudoitemDao.createSQLquery(sqlQuery);q.setParameter("idAcdDiscipConteudoItem",idAcdDiscipConteudoItem);q.executeUpdate();}