Fala galera. Bom estou precisando da ajuda de vocês, Eu tenho vários CURSOS cadastrado no banco de dados. ao fazer uma matricula de um ALUNO eu pego o Cursos que ele selecionou e coloca em uma List dentro desse aluno e salvo no banco de dados. A treta é o seguinte quando eu faço uma instanciar de aluno, e coloco o curso dentro da List deste aluno, na primeira vez vai, mas ao instanciar outro aluno e colocar o mesmo curso que já foi adicionado ao outro aluno, dar o seguinte error:
ERROR: Duplicate entry ‘1’ for key 'UK_79s4gn9ouad4ayxcj5bo8x0bh’
Então pelo o que eu vejo eu não posso colocar na List do outro aluno um curso q já esteja na List de outro aluno, isso não entendi galera. o modelo de relacionamento é este:
Minha classe Aluno e Curso:
@Entity
@Table(name = "alunos")
public class Aluno implements Serializable {
private final IntegerProperty id;
private final StringProperty nome;
private final StringProperty cpf;
private final StringProperty rg;
private final StringProperty telefone;
private final StringProperty celular;
private final StringProperty endereco;
private final StringProperty bairro;
private final StringProperty cidade;
private final StringProperty uf;
private LocalDate dataNascimento;
private LocalDate dataMatricula;
private Funcionario funcionarioMatricula;
private List<Curso> cursos;
public Aluno() {
this.id = new SimpleIntegerProperty();
this.nome = new SimpleStringProperty();
this.cpf = new SimpleStringProperty();
this.rg = new SimpleStringProperty();
this.telefone = new SimpleStringProperty();
this.celular = new SimpleStringProperty();
this.endereco = new SimpleStringProperty();
this.bairro = new SimpleStringProperty();
this.cidade = new SimpleStringProperty();
this.uf = new SimpleStringProperty();
this.cursos = new ArrayList<>();
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "aluno_id")
public Integer getId() {
return id.get();
}
@Column(name = "nome", length = 40)
public String getNome() {
return nome.get();
}
@Column(name = "cpf", length = 20, unique = true)
public String getCpf() {
return cpf.get();
}
@Column(name = "rg", length = 15, unique = true)
public String getRG() {
return this.rg.get();
}
@Column(name = "telefone", length = 16)
public String getTelefone() {
return telefone.get();
}
@Column(name = "celular", length = 16)
public String getCelular() {
return celular.get();
}
@Column(name = "endereco", columnDefinition = "text")
public String getEndereco() {
return endereco.get();
}
@Column(name = "bairro", length = 50)
public String getBairro() {
return this.bairro.get();
}
@Column(name = "cidade", length = 50)
public String getCidade() {
return this.cidade.get();
}
@Column(name = "uf", length = 4)
public String getUf() {
return this.uf.get();
}
@Column(name = "data_nascimento")
public LocalDate getDataNascimento() {
return this.dataNascimento;
}
@Column(name = "data_matricula")
public LocalDate getDataMatricula() {
return this.dataMatricula;
}
@ManyToOne
@JoinColumn(name = "funcionario_id")
public Funcionario getFuncionarioMatricula() {
return funcionarioMatricula;
}
@OneToMany()
@JoinTable(name = "aluno_cursos", joinColumns = @JoinColumn(name = "aluno_id"), inverseJoinColumns = @JoinColumn(name = "curso_id"))
public List<Curso> getCursos() {
return this.cursos;
}
//demais sets ocultados
}
Classe Curso:
@Entity
@Table(name = "cursos")
public class Curso implements Serializable {
private final IntegerProperty id;
private final StringProperty nome;
private final IntegerProperty cargaHoraria;
private final StringProperty conteudo;
private final DoubleProperty valor;
private final IntegerProperty porcentagemDesconto;
public Curso() {
this.id = new SimpleIntegerProperty();
this.nome = new SimpleStringProperty();
this.cargaHoraria = new SimpleIntegerProperty();
this.conteudo = new SimpleStringProperty();
this.valor = new SimpleDoubleProperty();
this.porcentagemDesconto = new SimpleIntegerProperty();
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "curso_id")
public Integer getId() {
return id.get();
}
@Column(name = "nome", length = 40, nullable = false)
public String getNome() {
return nome.get();
}
@Column(name = "carga_horaria")
public Integer getCargaHoraria() {
return cargaHoraria.get();
}
@Column(name = "conteudo", columnDefinition = "text")
public String getConteudo() {
return this.conteudo.get();
}
@Column(name = "valor", columnDefinition = "DECIMAL(10,2)")
public double getValor(){
return this.valor.get();
}
@Column(name = "porcentagem_desconto",columnDefinition = "INT DEFAULT '0'")
public int getPorcentagemDesconto(){
return this.porcentagemDesconto.get();
}
//demais sets ocultados.
}
e a maneira que estou salvando um aluno no banco é assim:
Aluno aluno = new Aluno();
aluno.setNome(txtNome.getText().trim());
//tabela que já contém os cursos. foi populada com os cursos no banco de dados
aluno.setCursos(tbCursoSelecionado.getItems());
//salva o aluno.
BancoDeDados.save(aluno);
alguém poderia me dar uma Luz? pois só salva o primeiro aluno, mas se salvar outro aluno q tenha o curso tbm, já dar aquele erro.
