[URGENTE] Duvida chaves compostas primárias e estrangeiras no Hibernate!

Pessoal, tenho umas dúvidas em relação ao mapeamento de chave composta no Hibernate.

Em primeiro lugar, como mapear uma chave primária composta numa classe, em que nenhuma das chaves é ao mesmo tempo FK.

[code]package framework.classesTeste;

public class Pessoa {

	private int codigo;
	private String cpf;
	private String nome;
	
	public Pessoa() {
		
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public int getCodigo() {
		return codigo;
	}

	public String getCpf() {
		return cpf;
	}

}[/code]

Em segundo lugar, como mapear uma chave primária composta numa classe, em que ao menos uma chave é PK e FK ao mesmo tempo.

package framework.classesTeste;

[code]public class Funcionario {

private int id; //PK auto incremento

            private Pessoa pessoa; //Porém pessoa deve ter chave composta mapeada
                
public Funcionario() {

}

public Pessoa getPessoa() {
	return pessoa;
}

public void setPessoa(Pessoa pessoa) {
	this.pessoa = pessoa;
}

public int getId() {
	return id;
}

}[/code]

Em terceiro lugar, na herança, como mapear a chave composta da classe pai, na classe filha usando o método de mapeamento TABELA POR SUBCLASSE?

[code]package framework.classesTeste;

public class Funcionario extends Pessoa {

private int id; //PK auto incremento

public Funcionario() {

}

public int getId() {
	return id;
}

}
[/code]

Em quarto lugar, como fazer uma busca no banco usando o session.get se a tabela tem chave composta?

Estamos fazendo um trabalho de monografia, e precisamos muito da ajuda de vocês. Por favor, colocar bem explícito e se possível com exemplo de código.

Segue diagrama deste contexto:

Atenciosamente,
Guilherme

da uma olhada nessa url

[x]
http://blog.mariojunior.com/?p=4

[/x]


http://www.infoblogs.com.br/view.action?contentId=18075&Hibernate-Composite-ID.html

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