Fórum Dúvida JPA - aula Dyego #387857
04/10/2010
0
Tenho conhecimento de JPA passado pelas videos aulas do Dyego.. mas fiquei em dúvida em uma situação:
Na aula onde ensina o @ManyToMany é passado um caso onde a tabela de relacionamento "a tabela do meio" possui somente os ids das outras duas tabelas do relacionamento. Gostaria de saber como mapear isso, se além dos ids, a tabela de relacionamento também conter outros campos, bem como como proceder na hora do seu Persist....
valew! t+
Skytrack Ltda
Curtir tópico
+ 0Posts
04/10/2010
Davi Costa
porque para o relacionamento ManyToMany, as entidades que realmente contam são as extremidades, a
tabela do meio simplesmente só serve para fazer o relacionamento,
caso queira manter algum atributo além dos id(s), seria melhor manter em uma das duas tabelas.
Att Davi
Gostei + 0
04/10/2010
Skytrack Ltda
Máquinas
id
descrição
..
..
..
Máquinas_peças
id_Máquina
id_Peça
PróximaDataTrocaPeça
Peças
id
descrição
..
..
..
1 Máquina possui várias peças e essa peça pode estar em várias máquinas (n:n)
Se eu não tivesse o atributo PróximaDataTrocaPeca na tabela de relacionamento (Máquinas_peças) eu usaria @ManyToMany pois não seria preciso criar esta classe, no mapeamento já é informado o nome da tabela e fica tudo certo, mas como faço quando tenho atributos além dos IDs ?
Gostei + 0
04/10/2010
Julio Cesar.
@JoinTable(name ="GrupoUsuario", <--tabela do meio
joinColumns = @JoinColumn(name="id_grupo" , referencedColumnName="id_na_class_grupo"),
inverseJoinColumns = @JoinColumn(name="id_usuario", referencedColumnName="id_na_class_usuario")) public List<Usuario> usuario; Usuario.class @ManyToMany
@JoinTable(name ="tabela_do_meio", <--tabela do meio
joinColumns = @JoinColumn(name="id_usuario" , referencedColumnName="id_na_class_usuario"),
inverseJoinColumns = @JoinColumn(name="id_grupo", referencedColumnName="id_na_class_grupo")) public List<Grupo> grupo; É essa a dúvida? att, Julio
Gostei + 0
05/10/2010
Skytrack Ltda
Gostei + 0
05/10/2010
Julio Cesar.
Gostei + 0
05/10/2010
Davi Costa
mas cara então relacionamento entre as extremidades não é manyToMany,
elas se relacionam somente com a tabela do meio com dois
OneToMany.
Ou é ManyToMany com duas tabela e uma tabela para fazer esse relacionamento,
ou é dois OneToMany para essa tabela central. Essa tabela pode até ter o embedable id,
tendo dois objetos das tabelas extremas. O hibernate é muito bom abstrai 95% da implementação,
mas temos que ter alguns cuidados Java é orientado a objetos, mas os banco são relacionais.
Espero ter ajudado
Att Davi
Gostei + 0
06/10/2010
Skytrack Ltda
Gostei + 0
08/10/2010
Davi Costa
conseguiram alguma solução?
Esses dias me deparei com algo parecido.. O que fiz mantive o ManyToMany e a tabela de relaciomento simplesmente só usada para esse fim. E outra que guarda outros atributos que não eram somente os ids das entidades dos extremos com dois relaciomentos OneToMany, nessa mesma entidade que guarda outros atributos.
Na verdade dessa forma nem precisaria mais do relacionamneto ManyToMany entre as entidades dos extremos, então o retirei. Não sei se atenderia seu caso, mas meu caso funcionou tranquilamente, com a modelagem igualzinha a que vc descreveu.
Mas se houver outra forma mais elegante de fazer, até outro colaborador do fórum citou antes que ia dar uma olhada. Ficaria muito grato em saber.
Att Davi
Gostei + 0
13/10/2010
Dyego Carmo
Gostei + 0
20/10/2010
Skytrack Ltda
Li mais sobre o assunto e até então decidi que vou fazer assim:
tabA
id
descricao
tabMeio
id
idTabA
idTabB
outroAtributos
tabB
id
descricao
Vou deixar como PK a minha tabMeio.id, auto incremento e vou relacionar as outras com idTabA e idTabB.. usando @OneToMany e @ManyToOne..
Vou criar o ID como PK na tabela do meio para não ter que utilizar IdTabA e idTabB como chave composta, evitando usado de @Embedded Id..
Amanhã posto o resultado..
abraços e valew a ajuda
Gostei + 0
20/10/2010
Skytrack Ltda
http://alinhavado.wordpress.com/tutoriais/de-many-to-many-para-many-to-one-com-jpa/
Gostei + 0
22/10/2010
Dyego Carmo
Gostei + 0
03/12/2010
Skytrack Ltda
obrigado a todos.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)