[RESOLVIDO]JPA: Chave primária composta, formada por chaves estrangeiras "repetidas"  XML
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Autor Mensagem
Mantu
GUJ Ranger
[Avatar]

Membro desde: 27/03/2006 09:05:16
Mensagens: 961
Localização: São Paulo/SP
Offline

Olá pessoal!
Estou com um problema no uso da JPA para a representação de um relacionamento maluco (Vide anexo):

CONNECTION representa a existência de uma conexão entre duas formas geométricas (não necessáriamente distintas).
LINK representa a ligação entre dois pontos de duas formas geométricas.
Uma conexão pode ser estabelecida por um ou mais links.

Meu problema está na hora de representar no JPA a classe para a entidade LINK. Abaixo segue o que já tentei fazer:

Tenho criada uma classe LinkPK anotada com @Embedded.

1)Uma primeira tentativa, foi utilizar o @EmbeddedId. Nesta abordagem, as classes ficaram assim:

O problema com essa abordagem foi que o Hibernate não consegue criar as tabelas, pois ele diz não encontrar os "mappedBy" na classe Link. Assumi que isso se deu por conta dos "mappedBy" estarem declarados na classe LinkPK, e abortei esta estratégia.

2)A segunda idéia foi utilizar o @IdClass. Aí só a classe Link e LinkPK foram alteradas:

Neste caso, o Hibernate até cria as tabelas, porém ele não consegue definir as foreign keys da tabela LINK. Segue o log na hora da geração das FK:
[Thumb - !tmp.jpg]
 Nome do arquivo !tmp.jpg [Disk] Download
 Descrição
 Tamanho 17 Kbytes
 Baixado:  41 vez(es)

This message was edited 1 time. Last update was at 06/08/2010 17:18:13


[]'s
Mantu

"Vou lançar o 'Caguei'. Caguei para o 'Cansei'". Luciano Camargo
"O povo votou contra a opinião pública". Um certo jornalão da mídia golpista, a respeito da vitória de um certo cadidato a presidente do Brasil.

[Email] [MSN] [ICQ]
lelodois
Virtual Machine Man
[Avatar]

Membro desde: 16/10/2007 07:57:45
Mensagens: 547
Localização: São Paulo
Offline

Vou replicar o erro aqui...

Java e Objective-C

Se depender de mim nunca ficarei plenamente maduro nem nas idéias nem no estilo, mas sempre verde, incompleto, experimental. G.F.

Os inteligentes aprendem com seus erros, os sábios aprendem com os erros dos outros.

Adorar a Deus é um privilégio.

De novo flores?
[Email] [WWW] [MSN]
davidbuzatto
Moderador
[Avatar]

Membro desde: 07/08/2004 23:47:57
Mensagens: 4013
Localização: Vargem Grande do Sul - SP
Offline

Oi Mantu,

E se você considerasse LinkPK como uma outra entidade?
Esse ManyToOne dentro da PK fica muito esquisito...

[]´s

Seja educado. Agradeça quem te ajudou. Não custa nada.
Dúvidas de Java? Utilize o fórum! Não respondo via MP.

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Fowler)
"A vida é um escândalo, e no final dá sempre errado. O que humaniza o homem é o fracasso."

http://davidbuzatto.com.br | GitHub | uHunt | CV Lattes | Last.fm
[WWW]
lelodois
Virtual Machine Man
[Avatar]

Membro desde: 16/10/2007 07:57:45
Mensagens: 547
Localização: São Paulo
Offline

O problema é que vc está usando compositeID erroneamente, no composite id vc só terá os IDs..
A referência para as classes deve ficar na classe que possui o id (link) e não na classe id (linkPk), a classe id só tem ids (linkId, dotFrom e dotTo)

Seu relacionamento deve ficar assim:

MAIN



DOT


LINKPK


LINK


Connection




Ps. Uma boa prática é vc dar nome nas ForeignKey




Aqui funcionou ehehhe



Abraços

This message was edited 2 times. Last update was at 06/08/2010 13:29:11


Java e Objective-C

Se depender de mim nunca ficarei plenamente maduro nem nas idéias nem no estilo, mas sempre verde, incompleto, experimental. G.F.

Os inteligentes aprendem com seus erros, os sábios aprendem com os erros dos outros.

Adorar a Deus é um privilégio.

De novo flores?
[Email] [WWW] [MSN]
Mantu
GUJ Ranger
[Avatar]

Membro desde: 27/03/2006 09:05:16
Mensagens: 961
Localização: São Paulo/SP
Offline

davidbuzatto wrote:Oi Mantu,

E se você considerasse LinkPK como uma outra entidade?
Esse ManyToOne dentro da PK fica muito esquisito...

[]´s

Eu também achei, mas não posso mudar muito a modelagem porque é legada...

[]'s
Mantu

"Vou lançar o 'Caguei'. Caguei para o 'Cansei'". Luciano Camargo
"O povo votou contra a opinião pública". Um certo jornalão da mídia golpista, a respeito da vitória de um certo cadidato a presidente do Brasil.

[Email] [MSN] [ICQ]
Mantu
GUJ Ranger
[Avatar]

Membro desde: 27/03/2006 09:05:16
Mensagens: 961
Localização: São Paulo/SP
Offline

lelodois, na sua versão da classe LinkPK, vc pos o campo "linkId" mas você, na verdade, quis dizer "connectionId"? Caso contrário, não bate com a modelagem (Esse id vem é fk da entidade CONNECTION).

Vou testar aqui a sua proposta assumindo que o linkId é connectionId. Depois aviso se funcionou.

tks

This message was edited 1 time. Last update was at 06/08/2010 14:18:26


[]'s
Mantu

"Vou lançar o 'Caguei'. Caguei para o 'Cansei'". Luciano Camargo
"O povo votou contra a opinião pública". Um certo jornalão da mídia golpista, a respeito da vitória de um certo cadidato a presidente do Brasil.

[Email] [MSN] [ICQ]
lelodois
Virtual Machine Man
[Avatar]

Membro desde: 16/10/2007 07:57:45
Mensagens: 547
Localização: São Paulo
Offline

Mantu wrote:lelodois, na sua versão da classe LinkPK, vc pos o campo "linkId" mas você, na verdade, quis dizer "connectionId"? Caso contrário, não bate com a modelagem (Esse id vem é fk da entidade CONNECTION).

Vou testar aqui a sua proposta assumindo que o linkId é connectionId. Depois aviso se funcionou.

tks


Verdade... confundi.
O que importa é ter a referência na classe que possui o id e não na classe id, a classe id deve ter somente os ids

abrs

Java e Objective-C

Se depender de mim nunca ficarei plenamente maduro nem nas idéias nem no estilo, mas sempre verde, incompleto, experimental. G.F.

Os inteligentes aprendem com seus erros, os sábios aprendem com os erros dos outros.

Adorar a Deus é um privilégio.

De novo flores?
[Email] [WWW] [MSN]
Mantu
GUJ Ranger
[Avatar]

Membro desde: 27/03/2006 09:05:16
Mensagens: 961
Localização: São Paulo/SP
Offline

Thanks lelodois, funcionou!
Só tive que colocar insertable/updatable false pro connectionId (Estava criando um campo a mais na tabela)

[]'s
Mantu

"Vou lançar o 'Caguei'. Caguei para o 'Cansei'". Luciano Camargo
"O povo votou contra a opinião pública". Um certo jornalão da mídia golpista, a respeito da vitória de um certo cadidato a presidente do Brasil.

[Email] [MSN] [ICQ]
lelodois
Virtual Machine Man
[Avatar]

Membro desde: 16/10/2007 07:57:45
Mensagens: 547
Localização: São Paulo
Offline

Mantu wrote:Thanks lelodois, funcionou!
Só tive que colocar insertable/updatable false pro connectionId (Estava criando um campo a mais na tabela)



Java e Objective-C

Se depender de mim nunca ficarei plenamente maduro nem nas idéias nem no estilo, mas sempre verde, incompleto, experimental. G.F.

Os inteligentes aprendem com seus erros, os sábios aprendem com os erros dos outros.

Adorar a Deus é um privilégio.

De novo flores?
[Email] [WWW] [MSN]
 
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Ir para:   
Powered by JForum 2.1.8 © JForum Team