estou com um probleminha e gostaria da ajuda de vcs. Estou usando o hibernate e preciso relacionar 3 tabelas:
1-Profissionais
id_prof
nome
2-Empresas
id_emp
descricao
3-Protocolo
id_prot
id_fk
data
assunto
a tabela de Protocolo poderá receber tanto o id de Profissional quando o id de uma Empresa por vez, ou seja, só vai haver um protocolo por Profissional ou Empresa.
E minha dúvida é como fazer o mapeamento na entidade Protocolo; posso fazer um mapped by no campo id_fk para os campos id de Profissional e id de Protocolo? Como fazer?
Olá. Não sei se te ajuda, mas eu trabalhei em um projeto em que eu tinha as entidades venda, compra e item.
Esse item uma hora pertencia a uma venda e outra hora pertencia a uma compra. Então na entidade item mapeie assim:
bom, pelo q entendi, na tua tabela de Vendas, vc tem dois campos, um VendaJB e outro CompraJB é isso? No meu caso é só um campo q deve se relacionar com 2 tabelas.
Usar um campo para fazer relacionamento com duas tabelas diferentes não me parece uma idéia legal (nem usual)
O melhor mesmo ,eu creio, seja criar dois campos: um para cada tabela.
Eu já trabalhei com um domínio similar e o exemplo do Henrique faz exatamente o que você precisa. Como ele mesmo disse: “Pode não ser a melhor opção mas funciona”.
Não. Eu tenho uma tabela venda e uma tabela compra, porque elas tem colunas totalmente diferentes.
E minha tabela item pode ser de compra ou de venda.
É parecido com o seu caso. Você tem profissional e empresa. E tem protocolo. Acho que do jeito que você fez irá funcionar.
bom, pelo q entendi, na tua tabela de Vendas, vc tem dois campos, um VendaJB e outro CompraJB é isso? No meu caso é só um campo q deve se relacionar com 2 tabelas.[/quote]
Você não pode usar dois campos? Um para cada tabela? Se sim, ai você usa o exemplo do Henrique
Não dá pra fazer isso, pelo que eu sei… você tem que ter algo indicando de onde esse campo vem… aliás, você nem vai conseguir criar essa FK no banco, não dá pra referenciar um campo pra duas tabelas, e se você não fizer essa FK terá um sério problema de integridade de dados…
O que você tem que fazer é criar os dois campos, sem fazer constraint de FK (pois eles podem ser nulos) e utilizar essa lógica que falaram acima, se um dos campos está nulo, verifique o outro…
Acho que vc poderia fazer da seguinte forma:
Criaria uma classe generica pra ser pai de Proficionais e Empresa e nela vc teria o id que seria herdado pelas filhas, ai vc faz o mapeamento de Protocolo com essa classe pai.
e na Tabela Protocolo
id_prot
id_fk_emp
id_fk_prof
data
assunto
Quando a tabela protocolo receber o id_fk_prof referenciando a tabela profissional o id_fk_emp que referencia a tabela empresa ficará nulo e vice e versa.
[quote=henriquejhc]Vou tentar explicar mais uma vez.
Tabela Profissionais
id_prof
nome
Tabela Empresas
id_emp
descricao
e na Tabela Protocolo
id_prot
id_fk_emp
id_fk_prof
data
assunto
Quando a tabela protocolo receber o id_fk_prof referenciando a tabela profissional o id_fk_emp que referencia a tabela empresa ficará nulo e vice e versa. [/quote]
Então, antes você não tinha mostrado esses campos id_fk_emp e id_fk_prof … dessa maneira é simples, você simplesmente mapeia os dois referenciando a Empresa e o Profissional respectivamente, mas eles não podem ser PK… pois pra ser PK não pode ser nulo…