quarta-feira, 22 de junho de 2011

Entendendo o Hibernate com Annotation



O Hibernate é um framework para o mapeamento Objeto-Relacional escrito na linguagem Java, mas também é disponível em .Net como o nome NHibernate. Ele facilita o mapeamento dos atributos entre uma base tradicional de dados relacionais e o modelo objeto de uma aplicação, mediante o uso de arquivos (XML) para estabelecer esta relação. O objetivo do Hibernate é diminuir a complexidade entre os programas Java, baseado no modelo orientado a objeto. Mas o framework não é uma boa opção para todos os tipos de aplicação, ele é mais indicado para sistemas que contam com um modelo rico, onde a maior parte da lógica de negócios fica na própria aplicação Java. Segundo a documentação oficial o Hibernate pretende retirar do desenvolvedor cerca de 95% das tarefas mais comuns de persistência de dados.

Como opção, iremos utilizar um recurso que veio com o JDK 5.0, chamado de Annotation ao invés de arquivos XML como eram feitos anteriormente. Resumindo o Hibernate transforma os dados de um objeto em uma linha de uma tabela de um banco de dados, ou de forma inversa. Com o mapeamento via anotações não é necessário criar nenhum arquivo XML para fazer o mapeamento, apenas colocar as anotações (Annotations) na classe POJO relacionada a tabela. Com o Hibernate também é possível mapear todos os relacionamentos existentes entre as tabelas de um banco de dados relacional.

Exemplo:

Algumas Annotations:

@Entity: declara a classe como uma entidade, ou seja, uma classe persistente.

@Table: define qual será o nome da tabela usando o atributo name.

@Id: define qual campo será usado como identificador.

@GeneretedValue: identifica a estratégia de geração de identificadores.

@Column: define qual coluna da tabela será mapeada.

  • name: nome da coluna na tabela do banco de dados que representa o atributo;
  • unique: indica se a coluna na tabela que representa o atributo possui a restrição de unicidade ou não. Por padrão, assume o valor false;
  • nullable: indica se a coluna na tabela que representa o atributo pode assumir valor nulo ou não. Por padrão, assume o valor true indicando que pode assumir valores nulos;
  • length: informa o tamanho máximo assumido pelo valor da coluna na tabela;
  • precision: informa a precisão decimal dos possíveis valores para a coluna mapeada pelo atributo;
  • insertable: indica se o atributo será inserido no momento da inserção de uma linha na tabela. Por padrão assume o valor true;
  • updatable: indica se o atributo será atualizado no momento da atualização de uma linha na tabela. Por padrão assume o valor true.


@Temporal: utilizada para mapeamento de datas e hora. Recebe um valor como argumento que pode ser:

  • TemporalType.DATE: usado para mapear datas;
  • TemporalType.TIME: usado para mapear hora;
  • TemporalType.TIMESTAMP: usado para mapear datas e hora.

Será apresentada a configuração a partir do arquivo hibernate.cfg.xml, este arquivo apresentará as propriedades de inicialização e os caminhos das classes mapeadas.

As descrições das propriedades a serem configuradas são:

  • hibernate.dialect: implementação do dialeto SQL específico do banco de dados a ser utilizado. Usado para identificar as particularidades do banco de dados;
  • hibernate.connection.driver_class: nome da classe do driver JDBC do banco de dados que está sendo utilizado;
  • hibernate.connection.url: é a URL de conexão específica do banco que está sendo utilizado;
  • hibernate.connection.username: é o nome de usuário com o qual o Hibernate deve se conectar ao banco;
  • hibernate.connection.password: é a senha do usuário com o qual o Hibernate deve se conectar ao banco;
  • hibernate.show_sql: utilizado para definir se os SQL’s gerados pelo Hibernate devem ou não ser exibidos no console (true | false).


No próximo post sobre Hibernate veremos como funciona a arquitetura do Hibernate, alguns mapeamentos de relacionamento e também as configurações necessárias para persistir um dado.

Abraços e até o próximo...

Um comentário: