Dúvida no mapeamento de 4 tabelas

Olá, estou desenvolvendo uma aplicação com Struts2, Hibernate.
Mas estou com um problema que não consigo resolver, já busquei bastante na internet, mas não encontrei nenhuma resposta que me ajudasse.

Tenho 3 tabelas com relacionamento “N” para “N”, com 1 associativa.

Tabelas AVALIAÇÃO, MODULO e QUESTÃO , a tabela associativa AVALICAO_MODULO_QUESTAO tem três chaves primarias que também são foren key das outras três tabelas.

Como faço para mapear a coleção de questões referente a uma AVALIAÇÃO e um MODULO?

Se puderem me ajudar agradeço muito.

Para tentar ser mais claro, colocarei a imagem do relacionamento abaixo:

Onde desejo realizar um mapeamento através de Annotations do Hibernate, tentei fazer com o @ManyToMany ou @OneToMany, mas não tive sucesso. Sempre ocorre um erro dizendo que o joinColumns={} só aceita uma referência de ID quando dentro das referências do @JoinTable.

Se alguém tiver alguma sujestão.

Já me disseram para utilizar @EmbeddedId ou @IdClass, mas não descobri como utilizar no meu caso.

Desde já agradeço.

Olá… Para resolver este problema você terá que criar uma classe com chave composta é mais ou menos assim:

[code]
@Entity
@Table (name=“avaliacao_modulo”)
public class AvaliacaoModulo implements Serializable {
@Id
private AvaliacaoModuloId pk = new AvaliacaoModuloId();
// get e set
}

@Embeddable class AvaliacaoModuloId implements Serializable {
@ManyToOne(fetch=FetchType.LAZY, optional=false)
@JoinColumn(name=“idavaliacao”)
private Avaliacao avaliacao;

    @ManyToOne(fetch=FetchType.LAZY, optional=false)
@JoinColumn(name="idmodulo")
private Modulo modulo;

    @ManyToOne(fetch=FetchType.LAZY, optional=false)
@JoinColumn(name="idquestao")
private Questao questao;

   //  get e set

}[/code]

marcossousa,

entendi que a classe com a chave composta fará a manipulação dos dados que eu realmente quero buscar.

Mas ainda não consegui entender qual eu farei essa chamada. Quando for escolher a Avaliação, como informarei o Módulo para retornar as questões corretas, sem qualquer duplicidade?

Teria um exemplo de como fazer a consulta?

Muito obrigado pela ajuda.

Não consigo fazer a busca fazendo referência dos dois “ids” de avaliação e modulo. Alguém pode me dar uma dica? Estou fazendo da seguinte forma!

@SuppressWarnings("unchecked")
	public List<QuestaoBean> consultarAvaliacaoModuloId(AvaliacaoModulo 
			avaliacaoModulo) throws Exception {
		Session sessao = HibernateUtil.getSessao();
		List<QuestaoBean> lista = new ArrayList<QuestaoBean>();
		lista = sessao.createCriteria(AvaliacaoModulo.class).add(Property
				.forName("codigoAvaliacao").like(avaliacaoModulo.getPk().getAvaliacao()
						.getCodigoAvaliacao())).add(Property
								.forName("codigoModulo").like(avaliacaoModulo
										.getPk().getModulo().getCodigoModulo()))
											.list();
		return lista;
	}

Mas dá um erro dizendo que “AvaliacaoModulo” não tem “codigoAvaliacao”.

Como faço para fazer uma busca com “WHERE” ou “LIKE”

Agradeço desde já.