[URGENTE]Dúvida chaves estrangeiras e primárias compostas

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

Há um bom exemplo sobre chaves compostas na documentação oficial do Hibernate:

http://docs.jboss.org/hibernate/stable/core/reference/en/html/misc.html#example-mappings-composite-key

Quanto à questão de como definir um campo pertencente a uma chave composta, mas que também é ele mesmo uma chave estrangeira, você deve declará-lo como em vez de .