Normalmente, para implementar uma relação muitos para muitos, você precisa usar alguma tabela intermediária para mapear chaves de duas outras tabelas.
No seu caso, você precisa, digamos, de
t_students_friends
tabela com duas colunas como a seguinte:t_students_friends
aluno_pk | amigo_pk
Em suas aulas de entidade você pode precisar de Listas para alunos e/ou amigos. Observe que
@ManyToMany
também requer um @JoinTable
anotação para o trabalho. Se você quiser acessar os amigos de um aluno, adicione ao seu Student
classe:@ManyToMany
@JoinTable(
name="t_students_friends",
[email protected](name="student_pk", referencedColumnName="id"),
[email protected](name="friend_pk", referencedColumnName="id"))
private List<Friend> friends;
Você também deve modificar
Friend
classe da seguinte forma. Adicionar @ManyToMany(mappedBy="friends")
private List<Student> students;
e use
@Id int id
simples campo como você faz em Estudantes. Não há necessidade de uma classe FriendsPK. Para mais informações, você pode ler aqui , por exemplo.