Table
Explicação
@Table
A anotação @Table
no JPA (Java Persistence API) é usada para especificar os detalhes do mapeamento de uma entidade para uma tabela em um banco de dados relacional. Ela faz parte da configuração do mapeamento objeto-relacional (ORM) e é essencial para definir como a classe Java será representada na tabela correspondente no banco de dados.
Objetivo da anotação @Table
A principal finalidade da anotação @Table
é permitir o mapeamento detalhado da classe para a tabela do banco de dados, oferecendo controle sobre o nome da tabela e outras propriedades que afetam a estrutura da tabela. Se você não usar a anotação @Table
, o JPA usará um nome de tabela padrão baseado no nome da classe (com algumas variações, dependendo da implementação do JPA, como Hibernate).
Sintaxe básica da anotação @Table
@Entity
@Table(name = "tab_cliente")
public class Cliente {
@Id
private Integer id;
private String cpfCnpj;
private String nomeCompleto;
// demais atributos ...
}
Neste exemplo:
@Table(name = "tab_cliente")
: Especifica que a entidadeCliente
será mapeada para a tabelatab_cliente
no banco de dados.
Atributos da anotação @Table
A anotação @Table
tem alguns atributos que permitem um controle mais refinado sobre o mapeamento da tabela:
name
:
- Descrição: Especifica o nome da tabela no banco de dados à qual a entidade será mapeada.
- Exemplo:
@Table(name = "tab_cliente")
catalog
:
- Descrição: Especifica o catálogo do banco de dados onde a tabela reside. O catálogo é um agrupamento lógico de esquemas de banco de dados (mais comum em bancos como Oracle ou SQL Server).
- Exemplo:
@Table(name = "tab_cliente", catalog = "izacrm_db")
schema
:
- Descrição: Define o esquema (ou namespace) do banco de dados onde a tabela será localizada. O esquema é um agrupamento lógico de tabelas em um banco de dados, muito comum em bancos como PostgreSQL e Oracle.
- Exemplo:
@Table(name = "tab_cliente", schema = "apl_cadastro")
uniqueConstraints
:
- Descrição: Define restrições de unicidade na tabela, ou seja, especifica colunas que devem ser únicas na tabela. É uma forma de garantir que os valores em uma ou mais colunas não se repitam.
- Exemplo:
Nesse exemplo, a coluna
@Table( name = "tab_cliente", uniqueConstraints = @UniqueConstraint(columnNames = {"id"}) )
id
será única na tabela, o que significa que nenhum valor pode se repetir nela.
indexes
:
- Descrição: Especifica índices para a tabela, o que pode melhorar a performance de consultas que envolvem as colunas indexadas.
- Exemplo:
Nesse exemplo, um índice será criado para a coluna
@Table( name = "tab_cliente", indexes = @Index(columnList = "cpfCnpj") )
cpfCnpj
da tabelatab_cliente
, o que pode acelerar buscas por essa coluna.
Particularidades da anotação @Table
- Nome da Tabela:
- Se o atributo
name
não for especificado, o JPA usará o nome da classe como nome da tabela. No exemplo anterior, a tabela seria chamadacliente
(que é o nome padrão derivado do nome da classe).
- Catalog e Schema:
- O uso de
catalog
eschema
é mais relevante em bancos de dados que oferecem suporte a essas estruturas. Para a maioria dos bancos, especialmente os que não usam esquemas explícitos como no caso do MySQL, esses atributos podem ser ignorados, mas é bom usá-los quando houver um controle mais rigoroso sobre o banco de dados.
- Restrições de Unicidade:
- As restrições de unicidade podem ser usadas para garantir a integridade dos dados, especialmente em colunas que não são chave primária. No exemplo dado,
id
é garantido ser único.
- Índices:
- A criação de índices também ajuda na performance de leitura de dados, especialmente em consultas com filtros e ordenações. No exemplo, os índices em
id
ecpfCnpj
aceleram buscas nessas colunas.
- Estrutura do Banco de Dados:
- A anotação
@Table
ajuda a personalizar e controlar como a tabela será gerada no banco de dados, seja para definir índices, chaves únicas ou definir o nome e o esquema correto.
Conclusão
Uma tabela é a estrutura básica de persistência de um banco de dados relacional. Uma tabela contém uma lista de colunas que definem sua estrutura e uma lista de linhas que definem os dados da tabela. Cada coluna possui um tipo específico e, geralmente, um tamanho. O conjunto padrão de tipos relacionais é limitado a tipos básicos, incluindo numérico, caractere, data-hora e binário (embora a maioria dos bancos de dados modernos possua tipos adicionais e sistemas de tipagem).
A anotação @Table
no JPA oferece uma maneira poderosa de controlar como uma classe de entidade é mapeada para uma tabela no banco de dados. Ela é especialmente útil quando você precisa personalizar o nome da tabela, o esquema, o catálogo ou adicionar restrições e índices à tabela. Essas opções permitem que você otimize o comportamento da tabela de acordo com as necessidades específicas do banco de dados e da aplicação.