PFK Composta

E ai galera.

Estou iniciando meus aprendizados em JPA e me deparei com a situação:
Tenho as entidades Pessoa e Endereco, sendo que uma pessoa pode ser composta por muitos endereços.
Tendo em vista que eu tenho um relacionamento forte entre estas duas entidades, a PK de Pessoa deve compor a PK de Endereco, junto com um outro campo sequencial que eu costumo chamar de sequencia. Como devo mapear este relacionamento no JPA com annotations?

Desde já, agradeço.

Olá joparibeiro,

talvez esses tópicos lhe ajude:

http://www.guj.com.br/java/274722-chave-composta-no-jpa
http://www.guj.com.br/java/204454-resolvido–mapeamento-de-chave-composta-no-hibernate-usando-annotation

Abraço

Mais alguém ?

[quote=joparibeiro]Mais alguém ?[/quote]O post que o thiaguten citou tem links lá que mostram como fazer a chave composta com campo extra. Tentou utilizar o campo extra e colocar a Sequence lá?

Funcionou parcialmente, Hebert.
Segue abaixo as classes Pessoa, Email e EmailId (que tem a mesma lógica de mapeamento entre Pessoa e Endereco).
O Hibernate criou a FK pessoa_id na tabela Email mas não colocou-a na chave primária junto com o campo Id.

[code]@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public abstract class Pessoa implements Serializable {

private static final long serialVersionUID = 450732004114951766L;

@Id
protected Long id;
 
@Column(length=50, nullable=false)
protected String nome;
 
@Temporal(TemporalType.DATE)
protected Calendar dataNasc;

@Column(length=250)
protected String obs;
 
@OneToMany(mappedBy="id.pessoa")
protected Set<Email> emails;

}
[/code]

[code]@Entity
public class Email implements Serializable {

private static final long serialVersionUID = 2896169431501590500L;

@EmbeddedId
private EmailId id;
 
@Column(length=50, nullable=false)
private String email;
 
@Column(length=50)
private String descricao;	

}
[/code]

[code]@Embeddable
public class EmailId implements Serializable {

private static final long serialVersionUID = -4839635656649864831L;

@ManyToOne
private Pessoa pessoa;

private Integer id;

}[/code]

Imports, getters e setters omitidos.

Se alguém mais puder ajudar, agradeço.

[quote=joparibeiro]Funcionou parcialmente, Hebert.
Segue abaixo as classes Pessoa, Email e EmailId (que tem a mesma lógica de mapeamento entre Pessoa e Endereco).
O Hibernate criou a FK pessoa_id na tabela Email mas não colocou-a na chave primária junto com o campo Id.[/quote]
Você vai setar o ID na mão? ou Vai querer que seja gerado automático? Se for automático está faltando o GeneratedValue

[quote=Hebert Coelho][quote=joparibeiro]Funcionou parcialmente, Hebert.
Segue abaixo as classes Pessoa, Email e EmailId (que tem a mesma lógica de mapeamento entre Pessoa e Endereco).
O Hibernate criou a FK pessoa_id na tabela Email mas não colocou-a na chave primária junto com o campo Id.[/quote]
Você vai setar o ID na mão? ou Vai querer que seja gerado automático? Se for automático está faltando o GeneratedValue[/quote]

Vou setar manualmente pois quero que a PK siga a seguinte regra:

(pessoa_id, id)
(1, 1)
(1, 2)
(1, 3)
(1, 4)
(2, 1)
(3, 1)
(3, 2)
(3, 3)
(3, 4)
(4, 1)
(4, 2)

Resolvido amigos.

Obrigado a todos que ajudaram.

Segui http://andrejavaeflex.blogspot.com.br/2009/10/em-criacao.html e consegui implementar.

Abraços.