Problema com cascade delete oprhan hibernate

2 respostas
ale0790

Tenho uma viagem, com uma lista de pacientes, e cada paciente pode ter uma lista de acompanhantes, quando vou excluir um paciente, removo os acompanhantes da lista, removo o paciente da viagem e atualizo a viagem, porem recebo a seguinte msg de erro.

erro:

org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations): [modelo.entidade.Acompanhante#1]

código:

`  public void excluirPacienteViagem(Integer cod) {

try {

session = HibernateUtil.currentSession();

for (int v = 0; v < viagem.getViagemPacienteList().size(); v++) {

if (viagem.getViagemPacienteList().get(v).getCodigo().equals(cod)) {

if (!viagem.getViagemPacienteList().get(v).getAcompanhanteList().isEmpty()) {

for (int x = 0; x < viagem.getViagemPacienteList().get(v).getAcompanhanteList().size(); x++) {

if (viagem.getViagemPacienteList().get(v).getAcompanhanteList().get(x).getTipoViagem().getCodigo() == 3) {

//volta

viagem.setVagasUtilizadasVolta(viagem.getVagasUtilizadasVolta() - 1);

} else if (viagem.getViagemPacienteList().get(v).getAcompanhanteList().get(x).getTipoViagem().getCodigo() == 2) {

// ida

viagem.setVagasUtilizadasIda(viagem.getVagasUtilizadasIda() - 1);

} else {

// ida e volta

viagem.setVagasUtilizadasVolta(viagem.getVagasUtilizadasVolta() - 1);

viagem.setVagasUtilizadasIda(viagem.getVagasUtilizadasIda() - 1);

}

viagem.getViagemPacienteList().get(v).getAcompanhanteList().remove(x);

}

}

if (viagem.getViagemPacienteList().get(v).getTipoViagem().getCodigo() == 3) {

//volta

viagem.setVagasUtilizadasVolta(viagem.getVagasUtilizadasVolta() - 1);

} else if (viagem.getViagemPacienteList().get(v).getTipoViagem().getCodigo() == 2) {

// ida

viagem.setVagasUtilizadasIda(viagem.getVagasUtilizadasIda() - 1);

} else {

// ida e volta

viagem.setVagasUtilizadasVolta(viagem.getVagasUtilizadasVolta() - 1);

viagem.setVagasUtilizadasIda(viagem.getVagasUtilizadasIda() - 1);

}
if (viagem.getViagemPacienteList().get(v).getRegistro() != null) {
                    Dao<Registro> daoR = new Dao<>(session, Registro.class);
                    viagem.getViagemPacienteList().get(v).getRegistro().setViagemPaciente(null);
                    daoR.merge(viagem.getViagemPacienteList().get(v).getRegistro());
                }
                viagem.getViagemPacienteList().remove(v);
                break;
            }
        }
        Dao<Viagem> daoViagem = new Dao<>(session, Viagem.class);
        daoViagem.merge(viagem);
    } catch (Exception e) {
        System.out.println(e);
    }
} `

2 Respostas

A

Posta a annotation de relacionamento onde vc está usando o orphan removal

ale0790
@OneToMany(cascade = CascadeType.ALL, mappedBy = "viagem",orphanRemoval = true)
private List<ViagemPaciente> viagemPacienteList;

Vlwwww, funcionou!

Criado 5 de janeiro de 2016
Ultima resposta 9 de jan. de 2016
Respostas 2
Participantes 2