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?
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.
M
marcossousaPJ
Olá... Para resolver este problema você terá que criar uma classe com chave composta é mais ou menos assim:
@Entity@Table(name="avaliacao_modulo")publicclassAvaliacaoModuloimplementsSerializable{@IdprivateAvaliacaoModuloIdpk=newAvaliacaoModuloId();// get e set}@EmbeddableclassAvaliacaoModuloIdimplementsSerializable{@ManyToOne(fetch=FetchType.LAZY,optional=false)@JoinColumn(name="idavaliacao")privateAvaliacaoavaliacao;@ManyToOne(fetch=FetchType.LAZY,optional=false)@JoinColumn(name="idmodulo")privateModulomodulo;@ManyToOne(fetch=FetchType.LAZY,optional=false)@JoinColumn(name="idquestao")privateQuestaoquestao;// get e set}
S
solimarPJ
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.
S
solimarPJ
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!