Problema com cascade delete oprhan hibernate

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);
    }
} `

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

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

Vlwwww, funcionou!