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 @Table
poderá 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 @Column
possui 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 @Column
para 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.
GO TO FULL VERSION