Я пытаюсь создать какое-то отношение пользователя к пользователю, такое как «пользователь A следует за пользователем B» и «пользователь A хочет быть другом пользователя B».
У меня есть класс пользователя, ивыглядит так:
@Entity
public class User{
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
List<User> followers;
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
List<User> following;
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
List<User> friendRequests;
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
List<User> requesting;
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
List<User> friends;
}
У меня две проблемы:
- Hibernate дает мне не может одновременно получить несколько пакетов проблема
- Я посмотрел в Интернете, люди сказали, чтобы удалить FetchType.EAGER или изменить его на Set вместо List, но это привело меня Поле не имеет значения по умолчанию
У меня такое ощущение, что отношения не определены должным образом, а также я должен видеть больше таблиц, потому что сейчас я вижу только таблицу User и таблицу User_User.
Обновление
Следующее создает 3 таблицы, друзей, подписчиков и запросчиков.Это несколько оптимизировано по сравнению с 5 таблицами?И есть ли какое-то преимущество в этом по сравнению с тем, что предложил Mr.J4mes?
@ManyToMany
@JoinTable(name = "followers", joinColumns = @JoinColumn(name = "followerId"), inverseJoinColumns = @JoinColumn(name = "userId"))
private List<User> followers;
@ManyToMany
@JoinTable(name = "followers", joinColumns = @JoinColumn(name = "userId"), inverseJoinColumns = @JoinColumn(name = "followerId"))
private List<User> following;
@ManyToMany
@JoinTable(name = "friends", joinColumns = @JoinColumn(name = "userId"), inverseJoinColumns = @JoinColumn(name = "friendId"))
private List<User> friends;
@ManyToMany
@JoinTable(name = "requesters", joinColumns = @JoinColumn(name = "requesterId"), inverseJoinColumns = @JoinColumn(name = "userId"))
private List<User> friendRequests;
@ManyToMany
@JoinTable(name = "requesters", joinColumns = @JoinColumn(name = "userId"), inverseJoinColumns = @JoinColumn(name = "requesterId"))
private List<User> requesting;