Galera podem me ajudar, estou tentando remover um item de uma lista, mas ao remover o item e utilizar o método update() do hibernate não muda nada.
Minha classe chamada Turma tem a seguinte lista:
@ManyToMany
@BatchSize(size = 10)
@JoinTable(name = "alunos_turmas", joinColumns = @JoinColumn(name = "turma_id"), inverseJoinColumns = @JoinColumn(name = "aluno_id"))
private List<Aluno> alunos;
ai ao tentar fazer isto aqui:
Turma turma = BancoDeDados.turma().getTurmaPorAluno(aluno);
turma.getAlunos().remove(aluno);
BancoDeDados.update(turma);
Não dar em nada, o aluno e removido da lista, mas o update não acontece na lista. alguém sabe me dizer como devo fazer isto?
Posta essa sua classe BandoDeDados, por favor.
Vc chama a transação, persiste e faz o commit? Enfatize os métodos de persistência, pois dessa forma ficou muito superficial.
Sim. faço tudo isso ai, o método da classe da classe BancoDeDados é este:
public static ResultadoBD update(Object objeto) {
ResultadoBD resultado = new ResultadoBD();
try (Session sessao = HibernateUtil.getSession()) {
Transaction transacao = sessao.beginTransaction();
sessao.update(objeto);
transacao.commit();
sessao.close();
resultado.setResultado(true);
resultado.setMensagem("Executado com sucesso!");
return resultado;
} catch (HibernateException | NoClassDefFoundError ex) {
resultado.setResultado(false);
resultado.setMensagem(ex.getMessage());
Log.salvaLogger(BancoDeDados.class.getName(), "update()", ex.getMessage());
return resultado;
} catch (PersistenceException e) {
resultado.setResultado(false);
resultado.setMensagem(e.getMessage());
Log.salvaLogger(BancoDeDados.class.getName(), "update()", e);
return resultado;
}
}
ele faz update somente nos atributos normais, como nome da turma. agr se removo algo da lista ele não atualiza. mas ao adicionar um novo aluno na turma, ai já o update na lista acontece.
Por enquanto a solução q encontrei foi criar uma QUERY com comando SQL para deletar o aluno da tabela.
String sql = "DELETE FROM alunos_turmas WHERE aluno_id=" + aluno.getId().toString() + "";
Relação:
Mano tentei os cascade aqui, mas mesmo assim não vai.
Tenta ai a propriedade OrphanRemoval = true na anotação do relacionamento.
Tenta dar um sessao.flush(); após realizar o commit da transação.
Mano pelo o que vi, não tem esse OrphanRemoval para relações @ManyToMany, mas obrigado mesmo assim
Mano realmente não sei pq mesmo assim não vai. mas paras outras relações vai de boa. o jeito que achei foi fazer uma SQL query na mão mesmo para remover o aluno da lista. mas obrigado mesmo assim.