dúvida Hibernate

2 respostas
P

Olá pessoal,

Estou começando com o Hibernate e tenho uma dúvida. Entendo que o Hibernate pode gerar as tabelas para mim, conforme o mapeamento que eu fizer (seja através de arquivos .hbm.xml ou então annotations). Em uma aplicação tipo loja virtual, eu pretendo modelar as classes/entities de forma que ao gerar as tabelas no banco o Hibernate faça algo assim:

____________________           __________________
|     PEDIDOS       |         |   ITENS_PEDIDOS  |
--------------------   1   N   ------------------
| *IdPedido (PK)    | <-----> | *IdPedido (FK)   |
|  demais atributos |         | *Núm. do pedido  |
|___________________|         | demais atributos |
                              |__________________|

isto é, na tabela ITENS_PEDIDOS a chave seja uma chave composta (pela combinação da FK e o número de cada item do pedido), sem necessidade de uma PK própria.

Alguém sabe qual mapeamento exatamente eu devo fazer para que o Hibernate gere essas tabelas?

Ou será que estou fazendo a modelagem errado, e deveria acrescentar uma chave primária em ITENS_PEDIDOS, como se faz com toda entity?

2 Respostas

R

O link abaixo deve ser útil:

http://www.guj.com.br/java/98735-hibernate—composite-id

No mais, não há uma modelagem “correta”. Você vai conseguir o resultado desejado tanto com uma chave composta quanto com uma chave simples. Porém, é mais fácil trabalhar com o Hibernate quando você usa uma chave simples. Eu recomendo trabalhar com chave simples, nesse caso a tabela ITENS_PEDIDOS teria uma chave primária auto-numerada, uma chave estrangeira apontando para a tabela PEDIDOS e um campo de número seqüencial representando o número do item dentro do pedido de interesse. Se escolher trabalhar com chave composta, não se esqueça de criar uma classe para modelar a chave composta, OK?

newbcc

Olá,

de acordo com as regras para normalização de base de dados, você deve ter um identificador um único para cada tabela, mesmo que elas não possuam valor de negócio para a sua aplicação.

Cria a chave primária nessa tabela também, e defina os demais campos como chave também, para o caso das chaves estrangeiras.

Não exisitirá nenhum impacto em definir uma chave primária (como você deve saber).

Abs!

Criado 15 de maio de 2011
Ultima resposta 15 de mai. de 2011
Respostas 2
Participantes 3