Vou colocar o meu caso aqui e a conclusão que vcs chegarem vai ajudar tb ao autor do tópico.
Tenho um relacionamento @OneToMany:
@Entity
public class Contato {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long idContato;
private String nome;
private String email;
@OneToMany(targetEntity=Mensagem.class ,cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "contato",orphanRemoval=true)
private List<Mensagem> mensagens = new ArrayList<Mensagem>() ;
public Contato() {
}
public void setIdContato(Long idContato) {
this.idContato = idContato;
}
public Long getIdContato() {
return idContato;
}
public List<Mensagem> getMensagens() {
return mensagens;
}
public void setMensagens(List<Mensagem> mensagens) {
this.mensagens = mensagens;
}
public Contato(Long idContato, String nome, String email,
List<Mensagem> mensagens) {
this.idContato = idContato;
this.nome = nome;
this.email = email;
this.mensagens = mensagens;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
@Entity
public class Mensagem {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long idMensagem;
private String assunto;
@Column(columnDefinition="text")
private String mensagem;
@ManyToOne
private Contato contato;
public String getAssunto() {
return assunto;
}
public void setAssunto(String assunto) {
this.assunto = assunto;
}
public Mensagem() {
}
public Mensagem(Long idMensagem, String assunto, String mensagem,
Contato contato) {
this.idMensagem = idMensagem;
this.assunto = assunto;
this.mensagem = mensagem;
this.contato = contato;
}
public Long getIdMensagem() {
return idMensagem;
}
public void setIdMensagem(Long idMensagem) {
this.idMensagem = idMensagem;
}
public String getMensagem() {
return mensagem;
}
public void setMensagem(String mensagem) {
this.mensagem = mensagem;
}
public Contato getContato() {
return contato;
}
public void setContato(Contato contato) {
this.contato = contato;
}
}
Pelo exposto acima, temos um contato que pode ter várias mensagens e uma mensagem deve pertencer a um contato.Correto?
Agora, para persistir isso na jsp:
<li><label for="mensagem.assunto">Assunto</label>
<div><input name="contato.mensagem.assunto" type="text" maxlength="255" />
</div>
</li>
<li><label for="mensagem.mensagem">Mensagem</label>
<div><textarea name="contato.mensagem.mensagem" rows="5" cols="80"></textarea>
</div>
</li>
O parâmetro do name não é reconhecido, até pq assunto e mensagem não estão na classe(ou tabela) Contato e sim na Mensagem.
Esse é o problema, como persistir um objeto Contato que pode possuir várias mensagens. Se instanciar a Mensagem, não vai salvar a Id do contato na tabela Mensagem, ficando desta forma:

O mesmo acontece com a dúvida do autor do tópico, embora o relacionamento seja ManyToMany.
Neste link mostra como deve ser feito, só que não serve para persistir via web:
http://www.hiberbook.com/HiberBookWeb/learn.jsp?tutorial=18mappingonetomanyassociations
Não percebi se o autor do tópico está em aplicação web ou desktop, se for desktop o link acima pode até ajudar.
Abraço!