Boa tarde pessoal, estou com um problema e gostaria que alguem me ajudasse.
estou com um projeto que possui algumas classes, entre elas as classes UNIDADE e CURSO, uma unidade pode ter vários cursos e um curso pode estar presente em muita unidades, caracterizando um many to many.
Eu estou fazendo uma tela de cadastro para alunos, sendo que as unidades disponíveis já virão do banco de dados através de um select e dependendo da que eu selecionar, um segundo select exibirá os cursos relacionados a essa unidade que eu escolhi.
eu consegui gerar todas as tabelas, inclusive a associativa que eu chamei de cursos-unidades, então criei uma classe com um método main() para cadastrar cursos e unidades, só que cada hora da um erro e quando mudo surge outro erro…
eu quero que a tabela associativa que tem apenas as chaves da tabela unidade e da tabela curso, quero que seja gerado uma linha para cada relacao entre unidade e curso, mas ela esta substituindo em vez de adicionar…
por exemplo:
crio duas Unidades e 5 cursos, se eu setar o mesmo curso nas duas unidades, em vez da tabela de ligação criar uma linha para cada ela deixa apenas a linha mais recente.
eu gostaria que alguém me explicasse como seria a melhor forma de fazer esse mapeamento many to many, tanto para cadastrar corretamente, quanto para resgatar os dados corretamente.
eu quero ter a opçao de buscar todos os cursos de uma unidade, ou todas as unidades que possuem um determinado curso, mas nao to sabendo mapear direito eu acho, segue abaixo o meu código na parte do mapeamento.
classe Unidade
public class Unidade implements Serializable
{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@Column
private String nome;
@Cascade(CascadeType.ALL)
@Fetch(FetchMode.JOIN)
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="id_universidade", nullable=false)
private Universidade universidade;
@ManyToMany(fetch=FetchType.EAGER)
@Fetch(FetchMode.JOIN)
@Cascade(CascadeType.ALL)
@JoinTable(name="unidades_cursos", joinColumns=@JoinColumn(name="id_unidade"), inverseJoinColumns=@JoinColumn(name="id_curso"))
private List<Curso> cursos;
@OneToOne(fetch=FetchType.LAZY)
@JoinColumn(name="id_endereco",nullable=false)
@Cascade(CascadeType.ALL)
private Endereco endereco;
classe curso
public class Curso implements Serializable
{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@Column
private String nome;
@Cascade(CascadeType.ALL)
@ManyToMany(fetch=FetchType.EAGER)
@Fetch(FetchMode.JOIN)
@JoinTable(name="unidades_cursos", joinColumns=@JoinColumn(name="id_curso"), inverseJoinColumns=@JoinColumn(name="id_unidade"))
private List<Unidade> unidades;
se alguém puder me ajudar ficarei muito grato…