Como criar um relacionamento entre 3 entidades usando anotações

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.

No caso módulo e curso tem uma relação de composição, o curso tem a lista dos módulos, e curso com aluno relação de associação many to many…

http://www.dzone.com/tutorials/java/hibernate/hibernate-example/hibernate-mapping-many-to-many-using-annotations-1.html
http://www.mkyong.com/hibernate/hibernate-many-to-many-relationship-example-annotation/
http://viralpatel.net/blogs/hibernate-many-to-many-annotation-mapping-tutorial/

Isso mesmo, essa é a relação existente entre eles…
Dei uma olhada nos links, mas também não me esclareceu como faço para “linkar” a tabela modulo, pois como disse antes a anotação entre Aluno e Curso está fazendo certo conforme os exemplos que me passou, minha dúvida é como fazer a anotação para salvar tb os módulos selecionados.
Não tenho muita experiência com anotações mas já li bastante documentação a respeito, porém não consegui evoluir neste caso, então se puder “mastigar” um pouco mais, fico agradecido.

Você colocou referência de curso em módulo mas é o inverso, curso tem que ter a lista dos módulos