Como Utilizar Mapeamento JPA Com Chave Composta por FK's

Pessoal tenho a tabela de Atestados que possui Cids
porém na tabela de cid possui uma chave composta com 5 foreigns keys de Atestados u[/u]
É eu sei… seria muito mais facil ter a Pk de Atestado como FK… porém não posso alterar o banco…
pesquisei e achei alguns tópicos porém só com chave compostas com Pks
então gostaria que me dessem um help…

Segundo o que eu li eu deveria criar uma classe com as FKS segue exemplo embaixo
e botar um @EmbeddedId private AtestadoFk atestadofk; na classe Cid…
[color=red]Só que como fica o ManyToOne com Atestado ? não consigo entender…[/color]

AtestadoFK

[code]public class AtestadoFk {

 @Column(name = "cd_empresa", nullable = false, length = 6)
private Long codigoEmpresa;

@Column(name = "cd_matricula", nullable = false, length = 10)
private Long codigoMatricula;

@Column(name = "tp_atestado", nullable = false, length = 10)
private Long tipoAtestado;

@Column(name = "dt_atestado", nullable = false)
@Temporal(javax.persistence.TemporalType.DATE)
private Date dataAtestado;

@Column(name = "nr_atestado", nullable = false, length = 11)
private Long numeroAtestado;

}[/code]

Atestado

[code]@Entity
@Table(name = “ATEST_MEDICOS”)
@SequenceGenerator(name = “SE__ATESTADO_MEDICO”, sequenceName = “SE_ATESTADO_MEDICO”)
public class Atestado implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "SE_ATESTADO_MEDICO")
@Column(name = "oid_atestado", nullable = false)
private Long id;

@SuppressWarnings("unchecked")
@OneToMany(targetEntity = Cid.class, cascade = CascadeType.ALL, mappedBy = "atestadoMedico",fetch=FetchType.EAGER) 
private Set<Cid> atestadoMedicoCid;

@Column(name = "cd_empresa", nullable = false, length = 6)
private Long codigoEmpresa;

@Column(name = "cd_matricula", nullable = false, length = 10)
private Long codigoMatricula;

@Column(name = "tp_atestado", nullable = false, length = 10)
private Long tipoAtestado;

@Column(name = "dt_atestado", nullable = false)
@Temporal(javax.persistence.TemporalType.DATE)
private Date dataAtestado;

@Column(name = "nr_atestado", nullable = false, length = 11)
private Long numeroAtestado;[/code]

Cid

[code]@Entity
@Table(name = “ATEST_MEDICOS_CID”)
@SequenceGenerator(name = “SE_ATESTADO_MEDICO_CID”, sequenceName = “SE_ATESTADO_MEDICO_CID”)
public class Cid implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "SE_ATESTADO_MEDICO_CID")
@Column(name = "oid_atestado_cid", nullable = false, length = 5)
private Long id;

@SuppressWarnings("unchecked")
@ManyToOne(targetEntity = Atestado.class, cascade=javax.persistence.CascadeType.ALL,fetch = FetchType.LAZY)
private Atestado atestadoMedico;

@Column(name = “doenca”, nullable = false, length = 60)
private String doenca;

@EmbeddedId
private AtestadoFk atestadofk;[/code]

ve se ajuda

http://www.guj.com.br/posts/list/82951.java

Poderia me corrigir se eu estiver errado ?
PS: Eu não consigo resolver isso com um relacionamento Bidirecional ?
então ficaria assim ?

AtestadoFk

[code]public class AtestadoFk {

@SuppressWarnings(“unchecked”)
@ManyToOne(targetEntity = Atestado.class, cascade=javax.persistence.CascadeType.ALL,fetch = FetchType.LAZY)
@JoinColumns({@JoinColumn(name=“cd_empresa”,referencedColumnName=“cd_empresa”),
@JoinColumn(name=“cd_matricula”,referencedColumnName=“cd_matricula”),
@JoinColumn(name=“tp_atestado”,referencedColumnName=“tp_atestado”),
@JoinColumn(name=“dt_atestado”,referencedColumnName=“dt_atestado”),
@JoinColumn(name=“nr_atestado”,referencedColumnName=“nr_atestado”)})
private Atestado atestadoMedico;

}[/code]

Cid

[code]@Entity
@Table(name = “HISTORICOS_ATEST_MEDICOS_CID”)
@SequenceGenerator(name = “SE_HISTORICO_ATESTADO_MEDICO_CID”, sequenceName = “SE_HISTORICO_ATESTADO_MEDICO_CID”)
public class Cid implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "SE_ATESTADO_MEDICO")
@Column(name = "oid_atestado_cid", nullable = false, length = 5)
private Long id;

@EmbeddedId
private AtestadoFk atestadofk;

@Column(name = "doenca", nullable = false, length = 60)
private String doenca;[/code]

Atestado

[code]@Entity
@Table(name = “ATEST_MEDICOS”)
@SequenceGenerator(name = “SE__ATESTADO_MEDICO”, sequenceName = “SE_ATESTADO_MEDICO”)
public class Atestado implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "SE_ATESTADO_MEDICO")
@Column(name = "oid_atestado", nullable = false)
private Long id;

@SuppressWarnings("unchecked")
@OneToMany(targetEntity = Cid.class, cascade = CascadeType.ALL, mappedBy = "historicoAtestadoMedico",fetch=FetchType.EAGER) 
private Set<Cid> historicoAtestadoMedicoCid;

@Column(name = "cd_empresa", nullable = false, length = 6)
private Long codigoEmpresa;

@Column(name = "cd_matricula", nullable = false, length = 10)
private Long codigoMatricula;

@Column(name = "tp_atestado", nullable = false, length = 10)
private Long tipoAtestado;

@Column(name = "dt_atestado", nullable = false)
@Temporal(javax.persistence.TemporalType.DATE)
private Date dataAtestado;

@Column(name = "nr_atestado", nullable = false, length = 11)
private Long numeroAtestado;[/code]

Valeu pessoal, resolvi apenas usando relacionamento bidirecional