Relacionamento ManyToMany Com Atributos

Bom dia!

Gostaria de mapear um relacionamento ManyToMany Com Atributos, só não sei exatamente como fazer isso. O que estou fazendo de errado? Segue o código abaixo:

Classe Cronograma

[code]@Entity
@Table(name = “tb_cronograma”)
public class Cronograma implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@Column(name="num_ano", nullable=false)
private Long numeroAno;

@Temporal(TemporalType.TIMESTAMP)
@Column(name="dth_cadastro", nullable=false)
private Date dataCadastro;

//gets e sets

}[/code]

Classe Etapa

[code]@Entity
@Table(name = “tb_etapa”)
public class Etapa implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@Column(name="cod_etapa", nullable=false)
private Long codigo;

@Column(name="dsc_etapa", nullable=false)
private String descricao;

//gets e sets

}[/code]

Classe CronogramaEtapaPk

[code]@Embeddable
public class CronogramaEtapaPk implements Serializable {

private static final long serialVersionUID = 1L;

@Column(name = "cod_etapa", nullable = false)
private Long codigoEtapa;

@Column(name = "num_ano", nullable = false)
private Long numeroAno;

}[/code]

Classe CronogramaEtapa

[code]@Entity
@Table(name = “tb_cronograma_etapa”)
public class CronogramaEtapa implements Serializable {

private static final long serialVersionUID = 1L;

@EmbeddedId
private CronogramaEtapaId cronogramaEtapaPk;

@ManyToOne
@JoinColumn(name = "cod_etapa", referencedColumnName = "cod_etapa", insertable = false, updatable = false, nullable = false)
private Etapa etapa;

@ManyToOne
@JoinColumn(name = "num_ano", referencedColumnName = "num_ano", insertable = false, updatable = false, nullable = false)
private Cronograma cronograma;

@Temporal(TemporalType.DATE)
@Column(name="dat_inicial_etapa", nullable=false)
private Date dataInicialEtapa;

@Temporal(TemporalType.DATE)
@Column(name="dat_final_etapa", nullable=false)
private Date dataFinalEtapa;

//gets e sets

}
[/code]

OBS.: A tabela etapa já está definida (code table). Ao salvar um CronogramaEtapa, caso não exista o registro na tabela Cronograma, este deve ser persistido. Agradeço a Ajuda.

Aqui mostra como fazer: http://uaihebert.com/?p=1622&page=22

Oi Hebert,

eu já tinha visto assim. O problema é que eu preciso de um método dentro de CronogramaEtapa que retorne o ID e assim terei 2 campos ID nesta classe. Sabe se tem como fazer do jeito que eu quero? Agradeço a ajuda.