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.
[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.