13 de agosto de 2007

Hibernate Composite ID

Bom dia galera, depois de algum tempo hoje irei postar um exemplo de hibernate usando chave composta....

Primeiramente vamos a tabela:

Permissoes
usuario #
grupo #
centro_de_custo #

# chaves compostas

Agora vamos mapear isso usando hibernate annotations com jpa.

Classe Permissoes:

@Entity
@Table(name = "permissoes")
@IdClass(PermissoesPk.class)
public class Permissoes implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@Column(name = "usuario")
private String usuario;

@Id
@Column(name = "grupo")
private String grupo;

@Id
@Column(name = "centro_de_custo")
private int centroDeCusto;

// gets e sets

}

Criaremos então uma nova classe que contém essas chaves:

@Embeddable
public class PermissoesPk implements Serializable {

private static final long serialVersionUID = 1L;

private String grupo;

private String usuario;

private int centroDeCusto;

// gets e sets

}

De acordo com a documentação para fazer um mapeamento de chaves compostas a classe que contém o nome com final PK deve sobreescrever o método equals e hascode e também implementar Serializable.

Na documentação do hibernate tem outras duas formas de mapeamento usando @Id ou @EmbeddedId.

Veja este exemplo usando @Id:

@Entity
public class RegionalArticle implements Serializable {

@Id
public RegionalArticlePk getPk() { ... }
}

@Embeddable
public class RegionalArticlePk implements Serializable { ... }

Veja este exemplo usando @EmbeddedId:

@Entity
public class RegionalArticle implements Serializable {

@EmbeddedId
public RegionalArticlePk getPk() { ... }
}

public class RegionalArticlePk implements Serializable { ... }


esses exemplos são para guardar, futuramentem precisarei com ctz.

mais exemplos siga:
http://www.hibernate.org/hib_docs/annotations/reference/en/html_single/#d0e1659

[]'s

Nenhum comentário: