Saudações galera não estou conseguindo fazer um mapeamento (por anotation) de um relacionamento ternário entre Pessoa, Telefone e tipo.
Lembrando, o relacionamento é ternário, ou seja, não existe tal relação se as três partes não estiverem envolvidas… Em nível de banco as três PK das entidades se tornariam uma chave composta…
Alguém sabe me exemplificar como ficaria tal mapeamento?
Agradeço desde já…
@OneToMany
@JoinTable(name = "DEP_FUNC", joinColumns = @JoinColumn(name = "DEP_ID"), inverseJoinColumns = @JoinColumn(name = "FUNC_ID"))
private Collection<funcionarios> funcionarios;
Eu entendi que é isso que você quis dizer
W
wesllhey
ou você pode cirar uma classe e criar mas outras classe e da @MappedSuperclass para que o id delas sejão ids de sua main
renanjp
Sim, é mais ou menos isso que eu estava imaginando…
Criar uma terceira classe
publicclassPersonHasPhoneimplementsSerializable{privatestaticfinallongserialVersionUID=1L;privatePersonperson;privatePhonephone;privatePhoneTypephoneType;// gets, sets, hash e equals}
CristianPalmaSola10
Voce tem e a tabela pessoa, phone e na tabela phone voce quer fazer uma chave primaria composta pelo id da pessoa pelo id do phone e pelo tipo do fone é isso mesmo ?
renanjp
Não, eu tenho 4 tabelas…
Pessoa
Telefone
Tipo
RL_Pessoa_Telefone (onde a chave primaria desta é composta pela chave estrangeira das outras três)
W
wesllhey
Amigo você tera que criar uma classe com todas as pks que deseja, dando @MappedSuperclass, depois você extenderar ela a sua classe Main
Renan, estou desconfiado que sua normalização esta com problemas.
Você pode dizer pra gente qual o papel desta entidade Tipo nesta relação?
flws
CristianPalmaSola10
O tipo na jogada é para dizer se o telefone é resindencial, comercial, da casa de mamae, da sogra ou da tia anastacia
fantomas
Então poderia se fazer as seguintes relações:
a) Person -> Telefone >> 1:N
b) Telefone <- Tipo >> N:1
Chegaria no objetivo sem criar uma tabela associativa, simplificando as anotações.
Que acham?
flws
renanjp
Mais ou menos isso…
Vou dar um exemplo pratico…
Imagine no contexto de uma agenda onde duas pessoas possuem o mesmo telefone…
Por exemplo, João e José são irmãos.
João possui o telefone x do tipo particular…
Nesta agenda o José também possui o telefone x, porém este telefone é apenas para contato…
Outra situação é a mesma pessoa relacionada mais de uma vez com o próprio telefone, porém com o tipo diferente…
Afinal de contas o mesmo telefone pode ser usado para varias funcionalidades, ou seja, João também pode estar relacionado com o telefone x, entretanto com o tipo comercial…
A ideia é que o relacionamento seja ternário…
renanjp
fantomas:
Então poderia se fazer as seguintes relações:
a) Person -> Telefone >> 1:N
b) Telefone <- Tipo >> N:1
Chegaria no objetivo sem criar uma tabela associativa, simplificando as anotações.
Que acham?
flws
Acredito que se eu fizesse assim, com a regra de negócio que possuo em mãos iria duplicar dados…
O meu post anterior cita um exemplo prático…
fantomas
Entendi…
flws
fantomas
Neste caso acredito que a suposta entidade associativa, deixa de ser associativa (entidade fraca) para ser uma entidade forte por causa do tipo, fazendo com que a relação fique assim:
a) Person -> (person, telefone, tipo) >> 1:N
b) Telefone -> (person, telefone, tipo) >> 1:N
c) (person, telefone, tipo) <- Tipo >> N:1
Fiz meio rapidinho vê se dá certo.
flws
renanjp
fantomas:
Neste caso acredito que a suposta entidade associativa, deixa de ser associativa (entidade fraca) para ser uma entidade forte por causa do tipo, fazendo com que a relação fique assim:
a) Person -> (person, telefone, tipo) >> 1:N
b) Telefone -> (person, telefone, tipo) >> 1:N
c) (person, telefone, tipo) <- Tipo >> N:1
Fiz meio rapidinho vê se dá certo.
flws
Sim realmente esta é a modelagem
O problema que estou tendo mesmo é para mapear esta relação…
Como que vou dizer ao hibernate que estas três entidades compõe a minha chave primária?
Não quero criar simplesmente um ID sobressalente, pois terei que garantir em código muitos tratamentos que o próprio SGBD já traz encapsulado…
A dúvida é realmente em como falar para o hibernate que as chaves primárias destas três classes compõem a chave primaria da entidade de “relacionamento”