Mapeando Nomes de Classe de Entidade para Nomes de Tabela SQL com JPA

Mapeando Nomes de Classe de Entidade para Nomes de Tabela SQL com JPA

1. Introdução

Neste breve tutorial, aprenderemos como definir nomes de tabelas SQL usando JPA.

Abordaremos como JPA gera os nomes padrão e como fornecer nomes personalizados.

2. Nomes de tabela padrão

A geração do nome da tabela padrão da JPA é específica para sua implementação.

Por exemplo, no Hibernate, o nome da tabela padrão é o nome da classe com a primeira letra maiúscula. É determinado por meio do contrato deImplicitNamingStrategy.

Mas podemos mudar esse comportamento emimplementing a PhysicalNamingStrategy interface.

3. Usando@Table

A maneira mais fácil de definir um nome de tabela SQL personalizado é anotar a entidade com@javax.persistence.Tablee definir seu parâmetro de nome:

@Entity
@Table(name = "ARTICLES")
public class Article {
    // ...
}

Também podemos armazenar o nome da tabela em uma variável final estática:

@Entity
@Table(name = Article.TABLE_NAME)
public class Article {
    public static final String TABLE_NAME= "ARTICLES";
    // ...
}

4. Sobrescrevendo o nome da tabela nas consultas JPQL

Por padrão, nas consultas JPQL, usamos o nome da classe da entidade:

select * from Article

Mas podemos alterá-lo definindo o parâmetro de nome na anotação@javax.persistence.Entity:

@Entity(name = "MyArticle")

Em seguida, mudaríamos nossa consulta JPQL para:

select * from MyArticle

5. Conclusão

Neste artigo, aprendemos como JPA gera nomes de tabela padrão e como definir nomes de tabela SQL usando JPA.

Como sempre, todo o código-fonte está disponívelover on GitHub.