Dúvida com mapeamento hibernate

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 :slight_smile:

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.