Hibernate sem primary Key

5 respostas
S

Bom dia,

Pessoal estamos com um problema sério aqui no trabalho.

Estamos migrando um sistema aqui onde o banco tem mais de 200 tabelas e 70% estão sem primary key.

Então a pergunta é. Séra que podemos colocar o hibernate para mapear o banco sem dar problema com as primary keys, pois o pessoal aqui não quer mecher no banco.

Att,

Fabiano

5 Respostas

luizrobertofreitas

Hum… boa pergunta. Pelo hibernate reference é orientado:

5.1.4. id
Mapped classes must declare the primary key column of the database table. Most classes will also have a JavaBeans-style property holding the unique identifier of an instance. The <id> element defines the mapping from that property to the primary key column.

Segue o link:

http://docs.jboss.org/hibernate/stable/core/reference/en/html/mapping.html#mapping-declaration-id

Inté :wink:

S

luizrobertofreitas

Então posso fazer o mapeamento sem nenhum problema.

O grande problema que vou ter é que não vou conseguir usar um gerador do tipo MyGeneration para gerar os relacionamento já que não existem.

Estou certo ou errado?

Att,

Fabiano

Giulliano

Não é possível usar HIbernate sem PK. Você vai precisar definir alguns atributos em comum e usar uma chave composta ou, se possível, definir um único atributo e defini-lo como PK.

Quando à geração do valor dessa PK…vai depender da sua base.

luizrobertofreitas

Não, assim como o Giulliano disse anteriormente, já mata a dúvida. O hibernate utiliza o atributo que seria o Id para realizar os mapeamentos. No caso do FetchType = Lazy (Utilizados para relacionamentos entre classes) para relacionamentos ManyToOne, não faria sentido não ter algum atributo Id na Classe. No texto em versão inglês, o documento diz que "Classes mapeadas devem declarar uma coluna primary key de uma tabela de banco de dados "

Inté

S

Entendi,

Nem se eu forçar, fizer o mapeamento do banco, ou seja, um exemplo tenho uma tabela de clientes com o atributo clie_idcliente_s (varchar(08)) e uma tabela contato com o atributo cont_idcliente_s varchar(08), ou seja eles não estão marcado com PK, mas sabemos que o cont_idcliente_s é FK e clie_idcliente_s é a PK, mas no banco não estão marcados como PK

<id name="Codigo" column="clie_idcliente_s" type="String" length="08">
      <generator class="assigned" />
    </id>
    <property name="Nome" column="Nome" type="String" length="45" />

<!-- Mapeamento da Coleção de Contatos -->
    <set name="contato" inverse="true"  lazy="true" >
      <key column ="cont_idcliente_s" />
      <one-to-may class="testeHibernate.contato, testeHibernate" />
    </set>

Isso não funcionaria quando eu fosse fazer um join para pegar os contatos do cliente?

Att,

Fabiano

Criado 23 de setembro de 2009
Ultima resposta 23 de set. de 2009
Respostas 5
Participantes 3