Olá pessoal, estou precisando de algumas dicas para o mapeamento de chaves compostas usando
hibernatee annotations. Olhei na documentação e não tive sucesso.
Na tabela atm eu tenho uma chave composta formada por dois campos: id_atm e id_loja
Esses dois IDs formam a chave composta.
A minha classe ATM está assim:
[code]public class ATM {
@ManyToOne()
@JoinColumn(name = "id_loja", nullable = false)
private Loja loja;
}[/code]
Como posso fazer esse mapeamento usando hibernate annotations… se alguém puder me dar
algumas dicas para que eu possa avançar, ficarei grato!
Obrigado.
cara eu to com o mesmo problema, só que eu sei como fazer mapeamento de chave composta, porem eu gostaria de mapear nao utilizando classes para pk. Mais vc pode mapear tua classe ATM assim:
Cria uma classe para pk:
@Embeddable
public class ATMPk implements Serializable {
@Column(name="id_atm")
private Integer idAtm;
@ManyToOne
@JoinColumn(name = "id_loja", nullable = false)
private Loja loja = new Loja();
Gets e sets.....
}
A classe ATM:
@Entity
@Table(name="nomeDaTabela")
public class ATM {
@EmbeddedId
private ATMPk pk = new ATMPk();
Gets e sets....
}
tente @JoinColumns ({@JoinColumn(name=“campo 1”),
@JoinColumn(name=“campo 2”)})
mizael86, e como faço por exemplo na consulta ? eu tenho que fazer a consulta com base no idATM e idLoja. Usando esse mapeamento que você passou, como devo fazer isso ?
vc vai se referenciar aos campos por pk.campo 
Olá, estou com a seguinte dúvida agora:
Tenho a tabela ATM com uma chave composta (idAtm, codLoja) e tenho a tabela Apreesentacao com
uma chave composta (cdLoja, idAtm).
Usando annotations, o mapeamento ficou assim:
[code]public class Apresentacao {
@EmbeddedId
private ApresentacaoPK pk;
}[/code]
[code]@Embeddable
public class ApresentacaoATMPK implements Serializable {
@ManyToOne
@JoinColumn(name = "cd_loja", nullable = false)
private Loja loja;
@ManyToOne
@JoinColumn(name = "no_atm", nullable = false)
private ATM atm;
}[/code]
Só que agora eu preciso de uma referência à classe ATM dentro da classe ApresentacaoPK, pois
há um relacionamento. O problema é que quando eu coloco a referência à classe ATM, ocorre um erro:
Caused by: org.hibernate.AnnotationException: A Foreign key refering Apresentacao has the wrong number of column. should be 2
Existe uma classe PK criada para ATM, só que se eu trocar a referência de ATM para ATMPK continua dando erro.
Se alguém puder me dar uma dica de como resolver esse problema, ficarei grato.
Obrigado.