chave primária

Disponível

anotação @Id

Cada entidade Entidade no Hibernate deve possuir um campo que será a chave primária: contém um valor único para todos os objetos desta classe. Normalmente, esse campo é anotado com a anotação @Id .

Forma geral:

@Id
Class Name;

Exemplo:

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

   @Embedded
   public UserAddress address;

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

Posicionamento da anotação

A propósito, você pode escrever anotações @Column não apenas para campos, mas também para métodos: para getters ou setters. Exemplo:

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

   @Id
   @Column(name="id")
   public Integer getId() {
   	return this.id;
   }
   public void setId(Integer id)    {
  	this.id = id;
   }

   @Column(name="created_date")
   public Date getDate() {
  	return this.createdDate;
   }
   public void setCreatedDate(Date date) {
      this. createdDate = date;
   }
}

Essa abordagem surgiu quando as anotações começaram a ser adicionadas não apenas às classes, mas também às interfaces. A interface não possui campos de classe, mas existem métodos: getters e setters. O Hibernate suporta esses dois padrões.

Importante! Se uma classe tiver a anotação @Entity , todos os seus campos serão tratados pelo Hibernate como campos persistentes (a menos que tenham a anotação @Transient especificada ). Mesmo que os campos não tenham nenhuma anotação: neste caso, o nome da coluna é considerado igual ao nome do campo da classe.

É aqui que a anotação @Id desempenha um papel importante. Se a anotação for colocada em um campo de classe, o Hibernate examinará os nomes e tipos dos campos. Se a anotação @Id for colocada em um método, o Hibernate procurará os nomes e tipos dos métodos.

Exemplo 1:

@Entity
@Table(name="user")
class User
{
   @Id
    public Integer id;
    public Date createdDate;  //this field will be treated as if it had @Column(name=" createdDate ")

}

Exemplo 2:

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

   @Id
   public Integer getId() {
   	return this.id;
   }
   public void setId(Integer id)    {
  	this.id = id;
   }

   public Date getDate() { //this field will be treated as if it had @Column(name=”date ”)
  	return this.createdDate;
   }
   public void setCreatedDate(Date date) {
  	this. createdDate = date;
   }

}

Anotação @GeneratedValue

Você mesmo pode atribuir um id aos seus novos objetos ou deixá-lo à mercê do Hibernate. Para que o Hibernate entenda melhor como atribuir IDs aos seus objetos, ele possui uma anotação especial:

@GeneratedValue

Essa anotação geralmente marca o mesmo campo que a anotação @Id . Ela tem 4 possíveis estratégias de atribuição de ID:

  • AUTO
  • IDENTIDADE
  • SEQÜÊNCIA
  • MESA

Um exemplo de anotação com a estratégia especificada:

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

    public Date createdDate;
}

Se nenhum valor de política for especificado, a estratégia AUTO será selecionada. A estratégia AUTO significa que o Hibernate atribuirá o próprio ID, baseado principalmente no tipo de dados do campo ID.

Por que no tipo? Sim, porque os tipos de ID podem ser muito diferentes, por exemplo, String ou GUID. Exemplo:

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

    public Date createdDate;
}

Nota: Um GUID em Java é chamado de UUID, historicamente falando. E o Hibernate pode gerar UUIDs únicos para seus objetos se você pedir.

Várias estratégias @GeneratedValue

Se você especificar o tipo GeneratedValue(strategy = GenerationType.IDENTITY) , então o Hibernate delega a configuração de ID para a camada do banco de dados. Normalmente, isso usa uma coluna chamada PRIMARY KEY, AUTOINCREMENT.

Mas se você quiser que seus IDs sejam únicos e gerados de acordo com um algoritmo especialmente especificado, você pode usar a anotação GeneratedValue(strategy = GenerationType.SEQUENCE) , por exemplo:

@Entity
@Table(name="user")
public class User {
	@Id
	@GeneratedValue(generator = "sequence-generator")
	@GenericGenerator(
  	name = "sequence-generator",
  	strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
  	parameters = {
    	@Parameter(name = "sequence_name", value = "user_sequence"),
    	@Parameter(name = "initial_value", value = "4"),
    	@Parameter(name = "increment_size", value = "1")
    	}
	)
	private long userId;

	// ...
}

Existem muitas outras maneiras de gerar um ID. Por exemplo, você pode ter uma chave exclusiva composta por várias colunas. E ao gravar um objeto no banco de dados, você precisa preencher todas essas colunas.

Não os darei em detalhes. Ainda assim, o objetivo de nossas palestras é conhecer o Hibernate, e não recontar a documentação oficial.

Comentários
  • Populares
  • Novas
  • Antigas
Você precisa acessar para deixar um comentário
Esta página ainda não tem nenhum comentário