2.1 Anotação @Entity, @Table

Se você deseja mapear sua classe para uma tabela no banco de dados, para isso você precisa adicionar até 3 anotações a ela.

Primeiro, você precisa adicionar uma anotação à classe @Entity. Esta anotação na frente da classe dirá ao Hibernate que esta não é apenas uma classe, mas uma classe especial cujos objetos precisam ser armazenados no banco de dados.

Exemplo:

@Entity
class User {
    public int id;
    public String name;
    public int level;
    public Date createdDate;
}

Isso é suficiente para que o Hibernate trate os objetos dessa classe de maneira especial.

A segunda anotação é @Table. Com sua ajuda, você pode definir o nome da tabela no banco de dados ao qual esta classe será associada. Exemplo:

@Entity
@Table(name="user")
class User {
    public int id;
    public String name;
    public int level;
    public Date createdDate;
}

Se o nome da classe e o nome da tabela forem iguais, a anotação @Tablepoderá ser omitida.

Além disso, se seu aplicativo trabalha com tabelas de vários esquemas ao mesmo tempo, você precisa especificar em qual esquema específico a tabela está localizada:

@Entity
@Table(name="user", schema="test")
class User {
    public int id;
    public String name;
    public int level;
    public Date createdDate;
}

Sim, tudo é tão simples quanto parece.

2.2 Anotação @Column

A segunda coisa importante a saber é o mapeamento das colunas da tabela para os campos da classe. Na versão mais simples, o Hibernate irá simplesmente mapear os campos da sua classe de entidade para as colunas da tabela desejada.

Se você deseja controlar todas as nuances do mapeamento, pode usar a anotação @Column. Exemplo:

@Entity
@Table(name="user")
class User {
   @Column(name="id")
   public Integer id;

   @Column(name="name")
   public String name;

   @Column(name="level")
   public Integer level;

   @Column(name="created_date")
   public Date createdDate;
}

A anotação @Columnpossui vários parâmetros, a seguir consideraremos os mais populares deles:

# Nome do Atributo Tipo de atributo Descrição
1 nome Corda Define o nome da coluna da tabela para o campo de classe
2 exclusivo boleano Todos os valores de campo devem ser únicos
3 anulável boleano O campo pode ser nulo
4 comprimento int Comprimento máximo (para strings)

Vamos adicionar algumas restrições aos campos da nossa classe User Entity:

  • o nome de usuário deve ser único e não ter mais de 100 caracteres
  • nível pode ser nulo
  • createdDate não pode ser nulo

Então nossas anotações se tornam:

@Entity
@Table(name="user")
class User {
   @Column(name="id")
    public Integer id;

   @Column(name="name", unique=true, length=100)
   public String name;

   @Column(name="level", nullable=true)
   public Integer level;

   @Column(name="created_date", nullable=false)
   public Date createdDate;
}

Você pode criar um objeto do tipo Usuário e até atribuir todos os campos nulos a ele, porém, ao tentar salvá-lo no banco de dados, o Hibernate fará uma verificação, e se alguma restrição for violada, uma exceção será lançada.

2.3 Anotação @Id

E mais uma anotação importante é @Id. Ele pode ser usado para definir a chave primária para uma tabela.

Você só precisa especificar esta anotação para o campo desejado - e o Hibernate fará tudo sozinho:

@Entity
@Table(name="user")
class User {
   @Id
   @Column(name="id")
   public Integer id;

   @Column(name="name")
   public String name;

   @Column(name="level")
   public Integer level;

   @Column(name="created_date")
   public Date createdDate;
}

Se você deseja que o Hibernate gere independentemente os IDs de seus objetos ao adicioná-los ao banco de dados, você precisa adicionar mais uma anotação - @GeneratedValue. Então nosso exemplo ficaria assim:

@Entity
@Table(name="user")
class User {
   @Id
   @GeneratedValue
   public Integer id;

   @Column(name="name")
   public String name;

   @Column(name="level")
   public Integer level;

   @Column(name="created_date")
   public Date createdDate;
}

Omitimos a anotação @Columnpara o campo id aqui, pois ele não carrega informações valiosas - o nome do campo e o nome da coluna na tabela são os mesmos e, graças ao restante das anotações, o Hibernate já entende que estamos falando de uma tabela coluna.