Поскольку у вас есть дополнительные столбцы в соединительной таблице, ее нельзя отобразить с помощью ManyToMany. Он должен быть отображен как два отношения OneToMany:
У одного пользователя (источника) много друзей
Одна Дружба для одного исходного пользователя (пользователь, который просил дружбы)
Одна дружба для одного целевого пользователя (пользователя, который должен принять дружбу)
Таким образом, у вас должны быть следующие сущности:
@Entity
public class User {
// ...
/**
* the list of friendships asked by this user
*/
@OneToMany(mappedBy = "sourceUser")
private List<Friensdship> frienships = new ArrayList<Friendship>();
}
@Entity
public class Friendship {
// ...
/**
* the user who asked the friendship
*/
@ManyToOne()
@JoinColumn(name = "user_id")
private User sourceUser;
/**
* the user to whom the friendship was asked
*/
@ManyToOne()
@JoinColumn(name = "friend_id")
private User targetUser;
}
При необходимости вы также можете указать обратное отношение у пользователя:
/**
* the list of friendships asked to this user
*/
@OneToMany(mappedBy = "targetUser")
private List<Friendship> requestedFriendships = new ArrayList<Friendship>();