Boa tarde,
Bom pessoal, estou com dúvida de como criar uma relacionamento entre 3 tabelas.
Tabelas: ALUNO, CURSO e MODULO definidas da seguinte forma:
[code]@Entity
@Table(name=“ALUNO”)
public class Aluno {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@ForeignKey(name="pessoa", inverseName="id_aluno")
@Column(name="id_aluno", nullable=false)
private long id;
@Column
private int anoConclEnsMedio;
@Column
private String escolaEnsRegul;
@Column
private String serie;
@Column
private int sexo;
@Column
private String obsAluno;
@Version
private long version;
@ManyToOne(cascade = javax.persistence.CascadeType.ALL, fetch=FetchType.EAGER)
@Fetch(FetchMode.JOIN)
@Cascade(CascadeType.SAVE_UPDATE)
private Pessoa pessoa;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name="aluno_curso", joinColumns=@JoinColumn(name="id_aluno"), inverseJoinColumns=@JoinColumn(name="id_curso"))
private List<Curso> cursoList;[/code]
[code]@Entity
@Table(name=“CURSO”)
public class Curso {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id_curso", nullable=false)
private long id;
@Column(name="nome", length=50)
@Resolvable(colName="Nome")
private String nome;
@Column
@Resolvable(colName="Início", formatter=DateFormatter.class)
private GregorianCalendar dataInicioCurso;
@Column
@Resolvable(colName="Término", formatter=DateFormatter.class)
private GregorianCalendar dataTermCurso;
@Column(length=10)
@Resolvable(colName="Sigla")
private String sigla;
@Column(name="obs", length=5000)
private String obs;
@Version
private long version;
@OneToMany(mappedBy="curso", fetch = FetchType.EAGER)
@Cascade(CascadeType.SAVE_UPDATE)
private List<Modulo> moduloList;
@Transient
@Resolvable(colName="Módulo")
private String moduloNome;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name="aluno_curso", joinColumns=@JoinColumn(name="id_curso"), inverseJoinColumns=@JoinColumn(name="id_aluno"))
private List<Aluno> alunoList;[/code]
[code]@Entity
@Table(name=“MODULO”)
public class Modulo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id_modulo", nullable=false)
private long id;
@Column(name="nome", length=50, nullable=false, insertable=true, updatable=true)
@Resolvable(colName="Nome")
private String nome;
@Column(length=10)
@Resolvable(colName="Sigla")
private String sigla;
@Column(name="obs", length=5000)
private String obs;
@Column(name="cursando")
//@Resolvable(colName="Cursando", accessMethod=MethodHandler.class) //QUANDO QUISER UTILIZAR GET E SET
@Resolvable(colName="Cursando", formatter=CheckBoxFormatter.class)
private Boolean cursando;
@Version
private long version;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "id_curso", nullable = false, insertable=true, updatable=true)
@Fetch(FetchMode.JOIN)
@Cascade(CascadeType.SAVE_UPDATE)
private Curso curso;[/code]
Até ai td bem…estou salvando no bando de dados em uma tabela intermediária chamada “aluno_curso” como a seguir:
Ex.:
TABLE: aluno_curso
id_curso | id_aluno
1 1
O meu problema é que cada CURSO terá vários MÓDULOS e o ALUNO terá vários CURSOS, mas nem todos os MÓDULOS que o CURSO possui estarão diretamente ligados ao ALUNO, isto será indicado pelo campo cursando na tabela MODULO.
Eu até poderia resolver essa situação de outra forma(“digamos na mão”), mas gostaria de saber como faço via anotações para criar este relacionamento, para que ficasse como abaixo:
Ex.:
TABLE: aluno_curso
id_curso | id_aluno | id_modulo
1 1 1
1 1 2
No aguardo do gurus de plantão…:-). Obrigado.