Informações
| Tipo: | Tutorial |
|---|---|
| Data de Publicação: | 01/05/2007 |
| Revisado em: | 01/05/2007 |
Vote!
Tags Relacionadas
Comentários ( 0 )
Imprimir
Mapeando Atributos de Classes com Anotações Hibernate
por:
Raphaela Galhardo (raphaela@jeebrasil.com.br)
Gleydson Lima (gleydson@jeebrasil.com.br)
Este tutorial destina-se a apresentar alguns exemplos de mapeamentos de atributos de uma classe, usando anotações Hibernate. Os atributos mapeados e apresentados não correspondem a associações/relacionamentos entre tabelas, ou seja, associações many-to-many, one-to-many, one-to-one ou many-to-one.
1. Mapeando Atributos da Classe
Considerando a classe Cliente, exibida na Figura 1, composta de um conjunto de atributos, onde um deles (id) corresponde à chave primária da tabela correspondente. Dessa forma, pode-se criar uma tabela cliente na base de dados a partir do script mostrado na e Listagem 1.\
Figura 1 - Classe Cliente
CREATE TABLE anotacoes.cliente ( id_cliente integer NOT NULL, cpf bigint NOT NULL, nome character(40) NOT NULL, endereco character(100), total_compras numeric(16,2), data_cadastro timestamp without time zone NOT NULL, data_nascimento date ) WITHOUT OIDS; ALTER TABLE anotacoes.cliente OWNER TO postgres;
Listagem 1 – Script para a Criação da Tabela cliente
A classe Cliente, ilustrada pela Listagem 2, possui exemplos de mapeamentos de atributos a partir das anotações: @Column, @Transient, @Temporal. As anotações @Id e @GeneratedValue também são utilizadas e servem para mapear a chave primária da tabela correspondente e definir como o seu valor será gerado, respectivamente, como explicado no tutorial anterior.
package br.com.jeebrasil.hibernate.anotacoes.dominio;
import javax.persistence.*;
@Entity
@Table(name="cliente", schema="anotacoes")
public class Cliente {
@Transient
private int temporaria;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name="id_cliente")
private int id;
@Column(unique=true, nullable=false,
insertable=true, updatable=true)
private long cpf;
@Column(nullable=false, length=40,
insertable=true, updatable=true)
private String nome;
@Column(length=100)
private String endereco;
@Column(name="total_compras", precision=2)
private double totalCompras;
@Column(name="data_nascimento", nullable=false)
@Temporal(TemporalType.DATE)
private Date dataNascimento;
@Column(name="data_cadastro")
@Temporal(TemporalType.TIMESTAMP)
private Date dataCadastro;
public Cliente(){}
//Métodos getters e setters
}
Listagem 2 – Mapeamento da Classe Cliente com Anotações
A seguir uma breve descrição das anotações utilizadas:
- Anotação @Transient: informa que o atributo mapeado não possui correspondente na tabela mapeada pela classe, ou seja, não é um atributo persistente;
- Atributos da anotação @Column utilizados:
- 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.
- Anotação @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 datas e hora;
- TemporalType.TIMESTAMP: usado para mapear hora.
2. Definição de Chave Primária Utilizando uma Seqüência Própria
Nos mapeamentos apresentado na seção anterior, a definição dos valores das chaves primárias foi feita apenas utilizando a seqüência hibernate_sequence. O exemplo presente na Listagem 3 mostra o mapeamento da chave primária da tabela cliente utilizando a seqüência de nome cliente_seq. Para isso, utilizou-se as anotações @SequenceGenerator e @GeneratedValue.
Na anotação @SequenceGenerator define-se qual seqüência criada na base de dados será utilizada para o mapeamento. No caso, nomeia-se a seqüência com o nome SEQ_CLIENTE (name = “SEQ_CLIENTE”).
Para definir qual seqüência será utilizada no mapeamento da chave primária, utiliza-se a anotação @GeneratedValue, onde é informado que a definição do valor do atributo será através de seqüências (strategy = GenerationType.SEQUENCE) e o nome da mesma (generator = "SEQ_CLIENTE").
package br.com.jeebrasil.hibernate.anotacoes.dominio;
import javax.persistence.*;
@Entity
@Table(name="cliente", schema="anotacoes")
public class Cliente {
@Id
@SequenceGenerator(name = "SEQ_CLIENTE",
sequenceName = " anotacoes.cliente_seq")
@GeneratedValue( strategy = GenerationType.SEQUENCE,
generator = "SEQ_CLIENTE")
@Column(name="id_cliente")
private int id;
//...
}
Listagem 3 – Mapeamento de Chave Primária Usando Seqüência Própria
3. Conclusões
Este tutorial foi breve, porém teve o intuito de apresentar o mapeamento de atributos da classe que não pertencem a relacionamentos. Também foi apresentado como se mapear uma chave primária para que a mesma tenha seu valor definido através de uma seqüência criada na base de dados.
Nos próximos tutoriais serão apresentados os mapeamentos de relacionamentos many-to-many, one-to-many, one-to-one ou many-to-one, de forma, que é importante ter em mente também o mapeamento dos tipos de atributos apresentados.
