Terceira tabela no relacionamento ManyToMany

16 respostas
L

Galera, tenho no meu BD um relacionamento (Muitos-para-muitos) entre Aluno e Turma e uma 3 tabela q seria Aluno_Turma onde alem dos campos (cod_aluno e cod_turma) tenho 3 outros (Inicio, fim, valor) qdo for mapear tenho q criar mais 2 classes pois foi o q axei até agora procurando por ai…alguma dica?

16 Respostas

K

Luxu,

Não e necessário criar um mapeamento para a terceira entidade. Você pode realizar o mapeamento das tabelas Aluno e Turma utilizando a propriedade JoinTable apontando para a terceira tabela que no caso seria a tabela associativa.

G

Kanin Dragon:
Luxu,

Não e necessário criar um mapeamento para a terceira entidade. Você pode realizar o mapeamento das tabelas Aluno e Turma utilizando a propriedade JoinTable apontando para a terceira tabela que no caso seria a tabela associativa.

Kanin,

Hoje tive o desprazer de conhece-lo em uma reunião, e posso afirmar vc e mala pra cara… oque tem de conhecimento não tem de humildade.

K

Jovem,
Obrigado em reconhecer as minhas habilidades … Estudei e estudo para cada vez mais ser o melhor profissional.
Outra coisa humildade é para os fracos.

L

entaum Kanin no alto de sua humildade explique para esse reles mortal como fazer isso q vc postou…

A

Lixoo …
Humildade é para os melhores …
Quem se acha o melhor, não é realmente !
Se vc realmente estuda para cada vez mais ser o melhor profissional, pode começar tudo de novo.

M

Cara, conhecimento não é um privilégio e sim uma responsabilidade e só uma pessoa muita forte consegue ser humilde.

Sobre o tópico, se estiver utilizando anotação pode tentar fazer assim

@Entity
public class Aluno implements Serializable {
@ManyToMany(
cascade = {CascadeType.PERSIST, CascadeType.MERGE},
targetEntity = Turma.class
)
@JoinTable(
name="ALUNO_TURMA",
joinColumns=@JoinColumn(name="ALUNO_ID"),
inverseJoinColumns=@JoinColumn(name="TURMA_ID")
)
public Collection getTurmas() {
   return turmas;
 }
}

@Entity
public class Turma implements Serializable {
@ManyToMany(
cascade = {CascadeType.PERSIST, CascadeType.MERGE},
mappedBy = "turmas",
targetEntity = Aluno.class
)
public Collection getAlunos() {
return alunos;
}
}

Esta é uma relação muito-para-muitos bidirecional, além de colocar a anotação ManyToMany nas duas classes, também é utilizado a anotação JoinTable, caso não seja usada o hibernate irá utilizar a seguinte regra: A tabela de junção terá o nome das duas tabelas separados por um underscore (Aluno_Turma) e o nome das foreign key será alunos_id e turmas_id, outra coisa que também deve ser notado é que um dos lados deve ser o proprietário da relação caso esta seja biderecional, por isso a anotação de JoinTable somente em uma classe.

L

vlw maykoone, só agora vi pois cheguei da faculdade agora, mas no meu caso tenho mais 3 atributos na terceira tabela(turma_aluno) como ficaria? uso anotaçoes sim, mas naum JPA, ou seja, terei q usar ao invés de CascadeType.PERSIST, CascadeType.MERGE terei q usar CascadeType.SAVE, CascadeType.UPDATE ou nada a ver?

G

Kanin Dragon:
Jovem,
Obrigado em reconhecer as minhas habilidades … Estudei e estudo para cada vez mais ser o melhor profissional.
Outra coisa humildade é para os fracos.

Com toda sua experiência em arquitetura SOA e projetos fora do país, vc deve ter uma porsche cayenne kkkkkkkkkkkk

Não deve passar de um coitado.

K

Jovem,
Você quase acertou … na minha garagem tem uma vera cruz e uma R1… Se eu vender os dois talvez consiga comprar uma cayane…

Fica ai com o seu palio 1.0 HUMILDE…

Aviso aos amigos humilde … humildade é para os fraco mesmo … Pobre que mora debaixo da ponte …

J

Eu vi o tópico e ia passar direto, mas resolvi deixar minha opinião, sei que ela não vale nada mesmo.

Parabens kanin por todo o seu crescimento profissional, mas não ignore o crescimento pessoal,
humildade é uma excelente virtude nas pessoas.

W

Kanin Dragon:
Jovem,
Você quase acertou … na minha garagem tem uma vera cruz e uma R1… Se eu vender os dois talvez consiga comprar uma cayane…

Fica ai com o seu palio 1.0 HUMILDE…

Aviso aos amigos humilde … humildade é para os fraco mesmo … Pobre que mora debaixo da ponte …

hahaha que lixo, nego come frango e arrota caviar! hahaha

M

O cara abre o tópico, e em vez da galera ajudar ficam discutindo com um cara que se acha semi-deus.

Mas luxu, você está usando diretamente as anotações do hibernate? porque as anotações que utilizei fazem parte do hibernate-annotations.
Uma alternativa que inclusive eu utilizava era trocar o ManyToMany por um ManyToOne nas duas classes ligadas a uma classe que faria o papel
do JoinTable. exemplo Aluno ManyToOne AlunoTurma, Turma ManyToOne AlunoTurma, ou seja, tu troca o ManyToMany por dois ManyToOne
e se quiser mapear a relação na classe intermediária faz um OneToMany para Aluno e um para Turma.

K

Jovens,
não irei discutir com você sobre o meu comportamento pessoal… aliais o meu terapeuta é muito bem remunerado para me dizer estas coisas…

Reforço que humildade é para os fracos… O meu network no Brasil e na Europa responde por mim …

sem mais

W

Kanin Dragon:
Jovens,
não irei discutir com você sobre o meu comportamento pessoal… aliais o meu terapeuta é muito bem remunerado para me dizer estas coisas…

Reforço que humildade é para os fracos… O meu network no Brasil e na Europa responde por mim …

sem mais

Network no Brasil e Europa?? hahahah como dizia aquele tiozinho na T.V, “simplesmente um luxo”. hahahaha

//Daniel

D

Kanin Dragon:
Jovens,
não irei discutir com você sobre o meu comportamento pessoal… aliais o meu terapeuta é muito bem remunerado para me dizer estas coisas…

Reforço que humildade é para os fracos… O meu network no Brasil e na Europa responde por mim …

sem mais

No forum tem gente com MUITO mais q vc… e HUMILDE…

vc pra mim é um LIXO…

D

Pessoal estou com o problema parecido… só que no meu caso a tabela de junção possui campos a mais do que sómente PK’S ai eu uso o “@Embeddable” mapenando assim a tabela de junção para ter os campos persistidos.

Segue a minha dúvida

Tenho as seguintes tabelas:

=> Social Composition - “Composição Social”

=> Partner - “Sócios”

=> Social Composition Partner “tabela de junção de Social Composition e Partner”

Estou tentando salvar a tabela de junção visto que existem 2(dois) campos para aquela junção. Ou seja compositionValue e compositionPercentage que ficam na " Social Composition Partner" além lógico de 2 pks , como segue abaixo:

Só que essa tabela de junção não tem “id” apenas tem 2(duas) FK.

Para eu salvar essa tabela de junção estou utilizando “@Embeddable” onde tenho a chave composta.

Ai eu seto as PK’s “idPartner” e “idSocialComposition”.

Mas tem um problema… como eu salvo a tabela de junção se eu não tenho a Composição Social?.

Oque eu fiz… Salvo a Composição social e retorno o id do insert e depois seto “idSocialComposition” na tabela de junção e depois dou um save. Funciona legal.

Ai que vem a dúvida, naão tem como salvar a tabela de junção com a tabela de SocialComposition e ele entender que é um insert novo e atribui um id para que eu possa salvar a tabela de junção?

Fico no aguardo obrigado!

Criado 16 de março de 2011
Ultima resposta 26 de out. de 2011
Respostas 16
Participantes 9