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
[quote=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,[/quote]
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 ?
[quote=rof20004]Nesse caso se tiver cascadeAll , basta chamar:
tabela1DAO.remove(tab1);[/quote]
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:
public void excluiRegistroAtividade(Long idAcdDiscipConteudoItem){
String sqlQuery = "delete from Acd_DiscipConteudoItem ad where ad.id_acd_discipconteudoitem = :idAcdDiscipConteudoItem ";
Query q = acdDiscipconteudoitemDao.createSQLquery(sqlQuery);
q.setParameter("idAcdDiscipConteudoItem", idAcdDiscipConteudoItem);
q.executeUpdate();
}