Mapeamento @ManyToMany quero aprender

Ola pessoal, estou com problemas no mapeamento ManyToMany, alguem poderia dar uma ajuda, explicar o que esta acontecendo e onde eu estou errando.
antes de mais nada muito obrigado.

Tenho uma classe chamada Lanche.

[code]@Entity
@Table(name = “TB_LANCHE”)
@SequenceGenerator(name = “codigo”, sequenceName = “SEQ_CODIGO_LANCHE”, allocationSize = 1)
public class Lanche {

@Id
@Column(name = "COD_LANCHE")
@GeneratedValue(generator = "codigo", strategy = GenerationType.SEQUENCE)
private int codigo;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns(value = {
		@JoinColumn(name = "COD_LANCHE", referencedColumnName = "COD_LANCHE"),
		@JoinColumn(name = "COD_INGREDIENTE", referencedColumnName = "COD_INGREDIENTE") })
private RLLancheIngrediente lancheIngrediente;[/code]

e outra classe chamada ingredientes.

[code]@Entity
@Table(name = “TB_INGREDIENTE”)
@SequenceGenerator(name = “codigo”, sequenceName = “SEQ_CODIGO_INGREDIENTE”, allocationSize = 1)
public class Ingrediente {

@Id
@Column(name = "COD_INGREDIENTE")
@GeneratedValue(generator = "codigo", strategy = GenerationType.SEQUENCE)
private int codigo;

@Column(name = "NOME")
private String nome;

@Column(name = "QUANTIDADE")
private int quantidade;

@Column(name = "UNIDADE")
private String unidade;

@Column(name = "VALOR")
private double valor;

@Column(name = "USUARIO")
private String usuario;

@Column(name = "ST_REGISTRO")
private String stRegistro = StatusRegistro.ATIVO.getCodigo();[/code]

e tenho uma classe de relacionamento chamada RLLancheIngrediente

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

/**
 * 
 */
private static final long serialVersionUID = 2064899212168214L;

@EmbeddedId
private RLLancheIngredientePk pk;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "COD_LANCHE", insertable = false, updatable = false)
private Lanche lanche;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "COD_INGREDIENTE", insertable = false, updatable = false)
private Ingrediente ingrediente;

@Column(name = "UNIDADE")
private String unidade;

@Column(name = "QUANTIDADE")
private int quantidade;

@Column(name = "ST_REGISTRO")
private String stRegistro = StatusRegistro.ATIVO.getCodigo();

[/code]

essa classe tem uma classe RLLancheIngredientePk

@Embeddable
public class RLLancheIngredientePk implements Serializable {

	private static final long serialVersionUID = -519198639542384944L;

	@Column(name = "COD_LANCHE")
	private int codLanche;

	@Column(name = "COD_INGREDIENTE")
	private int codIngrediente;

as tabelas do banco

CREATE TABLE TB_INGREDIENTE (
COD_INGREDIENTE NUMBER PRIMARY KEY,
NOME VARCHAR2(50) NOT NULL,
QUANTIDADE NUMBER,
UNIDADE VARCHAR2(2) NOT NULL,
ST_REGISTRO VARCHAR2(1) NOT NULL,
USUARIO VARCHAR2(50),
VALOR NUMBER(10,2)
)

CREATE TABLE TB_LANCHE (
COD_LANCHE NUMBER PRIMARY KEY,
NOME VARCHAR2(50) NOT NULL,
PRECO NUMBER(10,2),
ST_REGISTRO VARCHAR2(1) NOT NULL
)

CREATE TABLE RL_LANCHE_INGREDIENTE(
COD_LANCHE NUMBER,
COD_INGREDIENTE NUMBER,
QUANTIDADE NUMBER,
UNIDADE VARCHAR(2),
ST_REGISTRO VARCHAR(1),
PRIMARY KEY(COD_LANCHE, COD_INGREDIENTE),
FOREIGN KEY (COD_LANCHE) REFERENCES TB_LANCHE,
FOREIGN KEY (COD_INGREDIENTE) REFERENCES TB_INGREDIENTE
)

Onde estaria o ManyToMany nas entidades? E qual erro exatamente é apresentado? E uma dica, se você tiver controle sobre a criação do banco de dados evite usar chave composta. Poderia mudar os campos de chave primária para UNIQUE KEY e daí você cria um campo sequencial para ser a chave primária. Senão é trabalho a mais para o hibernate entender chave composta. Chave composta só é bom em many to many (onde normalmente existem só campos de relacionamento). Pelo menos as coisas fluem melhor assim no Hibernate, mas tem certas religiões de banco de dados que não permitem. No seu caso ai acho que Lanche teria uma lista de Ingredientes, esta lista seria OneToMany. Então pesquise sobre OneToMany.

Aqui mostra como utilizar o ManyToMany: JPA: Mini Livro - Primeiros passos e conceitos detalhados