Dúvidas Hibernate Annotations

3 respostas
rgf

Boa dia, gente!

Estou com algumas dúvidas e gostaria de saber se alguém poderia me ajudar. As dúvidas são as seguintes:

  • Quando uso a anotação @Column(unique = true), o unique = true só serve mesmo para a criação da tabela automaticamente a partir da classe mapeada? Pois tentei persistir dados com valor igual da coluna única (sem restrição no banco, mas com a restrição do mapeamento) e não acusou erro.
    Por que isso?

  • Quando mapeio uma chave primária para que o valor gerado para ela utilize a sequencia padrao hibernate_sequence, na hora de persistir linhas sequenciais na tabela, o incremento do valor da chave primária está sendo de 50, ao invés de gerar valores de 1 em 1. Alguém sabe por que?

  • Qual a utilizade de se mapear uma coluna com @Column(precision = 2)? Mapeei e quando fui persistir uma valor double com 3 casas decimais, o hibernate deixou passar… Por que?

  • Quais ferramantas existem para gerar tabelas a partir de classes mapeadas sem ser utilizando a propriedade create-drop no *.cfg.xml?

Obrigada pela ajuda

3 Respostas

fsquadro

rgf,

Você já deu uma olhada no Tutorial do Hibernate?
Ele é bastante completo, e acredito que irá sanar várias de suas dúvidas.

http://www.hibernate.org/hib_docs/v3/reference/en/pdf/hibernate_reference.pdf

rgf

Já havia olhado sim, porém as dúvidas ainda persistem… :frowning:

rgf

Para não deixar sem resposta:

  • Quando uso a anotação @Column(unique = true), o unique = true só serve mesmo para a criação da tabela automaticamente a partir da classe mapeada? Pois tentei persistir dados com valor igual da coluna única (sem restrição no banco, mas com a restrição do mapeamento) e não acusou erro.
    Por que isso?

É UTILIZADO APENAS PARA FAZER A ENGENHARIA DIRETA MESMO, OU SEJA, GERAR AS TABELAS A PARTIR DAS CLASSES

  • Quando mapeio uma chave primária para que o valor gerado para ela utilize a sequencia padrao hibernate_sequence, na hora de persistir linhas sequenciais na tabela, o incremento do valor da chave primária está sendo de 50, ao invés de gerar valores de 1 em 1. Alguém sabe por que?

PORQUE O HIBERNATE UTILIZA UM CACHE PARA VALORES DE PK NA MESMA SESSAO, QUE POR PADRÃO É 50. ENTÃO, NA MESMA SESSÃO,
DA PRIMEIRA VEZ QUE ELE PRECISA DO VALOR DA SEQUENCIA, ELE USA VALOR DA SEQUENCIA * 50. SE VC PERSISTIR ATÉ 50 ITENS NA SESSAO COM AQUELA SEQUENCIA, ELE VAI NO BANCO APENAS UMA VEZ DÁ O NEXTVAL, SE FOREM 60 ITENS, ELE ACESSA O BANCO 2 VEZES E ASSIM POR DIANTE.

SE VOCÊ QUISER QUE ELE TODA VIDA QUE PRECISAR DO VALOR DA PK A PARTIR DA SEQUENCIA VÁ NO BANCO DÁ UM NEXTVAL, UTILIZE O VALOR allocationSize = 1 DA ANOTAÇÃO @SequenceGenerator

  • Qual a utilizade de se mapear uma coluna com @Column(precision = 2)? Mapeei e quando fui persistir uma valor double com 3 casas decimais, o hibernate deixou passar… Por que?

AINDA NAO SEI…

  • Quais ferramantas existem para gerar tabelas a partir de classes mapeadas sem ser utilizando a propriedade create-drop no *.cfg.xml?

ESSA JÁ É BASTANTE LEGAL E AINDA TEM A OPÇÃO DE SE UTILIZAR O update AO INVÉS DO create-drop.

Criado 14 de maio de 2007
Ultima resposta 31 de mai. de 2007
Respostas 3
Participantes 2