1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

JPA - Ao tentar apagar um registro: ConstraintViolationException

Boa tarde pessoal. Estou com o seguinte problema:

Tenho duas Entidades: Aluno e Turma que possuem um relacionamento "Muitos pra Muitos" sem atributos extras. Logo no banco foram criadas 3 tabelas:

tb_aluno (mapeada da entidade Aluno) tb_turma (mapeada da entidade Turma)

tb_aluno_turma(essa foi criada automaticamente, ou seja, não tenho nenhuma Entidade representando essa tabela)

O problema é que, quando tento apagar uma Turma e nessa Turma já existe Aluno matriculado é lançada a exceção: ConstraintViolationException

Eu entendo que primeiro eu teria que apagar todos os Alunos matriculados na Referida Turma e esses dados estão na tb_aluno_turma. (me corrijam se eu estiver errado)

CasdadeType.ALL não está funcionando, então pensei em apagar os dados dessa terceira tabela na unha, mas como vou acessar os dados dessa tabela (tb_aluno_turma), se não tenho nenhuma Entity lhe representando?? Estou usando JPA e não posso me referir diretamente a uma tabela certo? Alguém poderia me ajudar com esse problema?

Entidade Aluno

@Entity
@Table(name="tb_aluno")
public class Aluno extends Pessoa implements Serializable{


    @Column(name="nome_do_responsavel", length=30)
    private String nomeDoResponsavel;


    @Column(name="data_da_matricula", length=10)
    @Temporal(TemporalType.DATE)
    private Date dataMatricula;

    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "tb_aluno_turma",
            joinColumns = @JoinColumn(name = "id_aluno_pk", nullable=false),
        inverseJoinColumns = @JoinColumn(name = "id_turma_pk")
     )
     private List<Turma> turmasList;

    @OneToMany (mappedBy="aluno",targetEntity=Matricula.class, cascade= CascadeType.ALL)
    private List<Matricula> pagamentosList;


    public Date getDataMatricula() {
        return dataMatricula;
    }

    /**
     * @param dataMatricula the dataMatricula to set
     */
    public void setDataMatricula(Date dataMatricula) {
        this.dataMatricula = dataMatricula;
    }

    /**
     * @return the nomeDoResponsavel
     */
    public String getNomeDoResponsavel() {
        return nomeDoResponsavel;
    }

    /**
     * @param nomeDoResponsavel the nomeDoResponsavel to set
     */
    public void setNomeDoResponsavel(String nomeDoResponsavel) {
        this.nomeDoResponsavel = nomeDoResponsavel;
    }

    /**
     * @return the pagamentosList
     */
    public List<Matricula> getPagamentosList() {
        return pagamentosList;
    }

    /**
     * @param pagamentosList the pagamentosList to set
     */
    public void setPagamentosList(List<Matricula> pagamentosList) {
        this.setPagamentosList(pagamentosList);
    }

    /**
     * @return the turmasList
     */
    public List<Turma> getTurmasList() {
        return turmasList;
    }

    /**
     * @param turmasList the turmasList to set
     */
    public void setTurmasList(List<Turma> turmasList) {
        this.turmasList = turmasList;

    }

}

Entidade Turma

@Entity
@Table(name="tb_turma")
public class Turma implements Serializable {
    @Id @GeneratedValue
    private long id;

    @Column(name="data_de_inicio", length=10)
    @Temporal(TemporalType.DATE)
    private Date dataInicio;

    @Column(name="data_de_termino", length=10)
    @Temporal(TemporalType.DATE)
    private Date dataTermino;


   // private Funcionario professor;

    @ManyToOne
    @JoinColumn(name="id_curso_fk")
    private Curso curso;

    @ManyToOne
    @JoinColumn(name="id_horario_fk", nullable=false)
    private Horario horario; 

    @ManyToOne
    @JoinColumn(name="id_professor_fk")
    private Funcionario professor;




    /* GETS / SETS */ 
    public long getId() {
        return id;
    }

    /**
     * @param id the id to set
     */
    public void setId(long id) {
        this.id = id;
    }

    /**
     * @return the curso
     */
    public Curso getCurso() {
        return curso;
    }

    /**
     * @param curso the curso to set
     */
    public void setCurso(Curso curso) {
        this.curso = curso;
    }

    /**
     * @return the horario
     */
    public Horario getHorario() {
        return horario;
    }

    /**
     * @param horario the horario to set
     */
    public void setHorario(Horario horario) {
        this.horario = horario;
    }

    /**
     * @return the dataInicio
     */
    public Date getDataInicio() {
        return dataInicio;
    }

    /**
     * @param dataInicio the dataInicio to set
     */
    public void setDataInicio(Date dataInicio) {
        this.dataInicio = dataInicio;
    }

    /**
     * @return the dataTermino
     */
    public Date getDataTermino() {
        return dataTermino;
    }

    /**
     * @param dataTermino the dataTermino to set
     */
    public void setDataTermino(Date dataTermino) {
        this.dataTermino = dataTermino;
    }

    /**
     * @return the Professor
     */
    public Funcionario getProfessor() {
        return professor;
    }


    public void setProfessor(Funcionario Professor) {
        this.professor = Professor;
    }
    @Override
    public String toString(){
        return this.curso.getModulo();
    }
}
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags jpa delete ou faça a sua própria pergunta.