Olá a todos,
Tenho uma lista de questões em um prova , onde está lista pode ter questões já validadas pelo administrador como também questões novas pendentes de validação.
Caso o administrador ache que a prova não é válida, o sistema deleta a prova e apenas as questões que ñ foram validadas ainda.
O codigo abaixo simplifica isso.
Prova prova = daoProva.find(idProva);
List<ProvaQuestao>listaQuestoesValidas = new ArrayList<ProvaQuestao>();
for (ProvaQuestao provaQuestao : prova.getListaDeQuestoes()) {
Boolean isFalso = provaQuestao.getQuestao().getFlAtiva();
if(!Boolean.FALSE.equals(isFalso))
listaQuestoesValidas.add(provaQuestao);
}
prova.getListaDeQuestoes().removeAll(listaQuestoesValidas);
Prova provaAtualizada = daoProva.merge(prova);
daoProva.delete(provaAtualizada);
O relacionamento está assim:
PROVA
@OneToMany(fetch = FetchType.EAGER, mappedBy = "prova",cascade=CascadeType.ALL)
private List<ProvaQuestao> listaDeQuestoes;
@Column(name = "fl_ativa")
private Boolean flAtiva;
PROVAQUESTAO
@ManyToOne(cascade = CascadeType.ALL,fetch=FetchType.LAZY)
@JoinColumn(name = "id_prova", referencedColumnName = "id_prova",nullable = false)
private Prova prova;
@ManyToOne(cascade = CascadeType.ALL,fetch=FetchType.EAGER)
@JoinColumn(name = "id_questao", referencedColumnName = "id_questao",nullable = false)
private QuestoesAvulsas questao;
private Integer num_questao;
O problema é que quando dou um merge ,ñ deveria remover os relacionamentos com as questões validas ?
Mas ele ñ faz isso , o JPA deleta todas as questões inválidas,mas na hora de remover a prova da erro de integridade referencial, pois na tabela ainda continua a referencia das questões validas com a prova.
Alguém sabe como posso fazer isso ?, remover a prova e questões inválidas em cascade sem deletar as questões válidas