Dúvida Tabela com chave composta  XML
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Autor Mensagem
Jedi_FeniX
Virtual Machine Man
[Avatar]

Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline

Estudando o hibernate e fazendo uns testes com o mesmo no netbeans vi que quando tem uma tabela com uma chave composta tem que se criar uma classe para essa chave.
Alguém poderia explicar o motivo disto, porque ainda não ficou muito claro este conceito.

This message was edited 1 time. Last update was at 12/08/2009 20:28:48


www.bau-de-dev.com
Lavieri
GUJ Master
[Avatar]

Membro desde: 27/01/2004 13:39:31
Mensagens: 1851
Localização: João Pessoa / PB
Offline

O motivo é pq o provedor de persistencia não tem como comparar + de 1 propriedade, então isso tem que ser feito explicitamente por vc...

O objeto PK que vc criar tem que implementar corretamente os métodos equals/hashCode para o funcionamento correto da aplicação...

é uma exigencia do JPA que toda entidade tenha uma chave primaria única... o Netbeans mapea a classe totalmente em separado, o que na minha opinião é ruim, pois vc acaba tendo que fazer algo como

entrada.getId().getPessoa();
entrada.getId().getHorario();

Forma que o netbeans mapea uma calsse dessas





você pode usar uma abordagem bem mais facil, no uso da classe, que é o @IdClass, com ele vc cria o objeto em separado, que mostra para o provedor de persistência como comparar 2 objetos, mas não estraga seu objeto

nesta segunda abordagem vc pode usar direto

entrada.getPessoa();
entrada.getHorario();

pois a classe é definida assim


vc continua tendo que escrever o EntradaPK, porem o objeto Entrada fica mais claro... e o objeto EntradaPK vai existir apenas para informar ao provedor de persistencia como comparar com equals e hashCode... e neste caso do uso de @IdClass o objeto EntradaPK não precisa ser anotado como @Embedable

Ps.: Se não entender equals/hahscode, entra no meu blog na minha assinatura q la tem explicações...

This message was edited 2 times. Last update was at 12/08/2009 22:10:23


Sun Certified Java Programmer (SCJP 6)

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999

Meu blog -> http://blog.tomazlavieri.com.br/
[ICQ]
 
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Ir para:   
Powered by JForum 2.1.8 © JForum Team