Это зависит от того, что вы хотите иметь в базе данных.
Если вы хотите иметь отдельный внешний ключ для publisher
и объединить таблицу для manager
, самый простой способ отобразить другую сторонуэто так:
public class Task{
@ManyToOne
private User publisher;
@ManyToMany
private List<User> manager;
...
}
public User{
@OneToMany(mappedBy = "publisher")
private List<Task> publishedTasks;
@ManyToMany(mappedBy = "manager")
private List<Task> managedTasks;
...
}
Если вам действительно нужен единый список задач в User
, вы можете создать его программно.
В качестве альтернативы, вы можете иметь одну таблицу соединения с дополнительнымRole
свойство:
public enum Role { PUBLISHER, MANAGER }
public class Task{
@ManyToMany
@MapKeyEnumerated
private Map<Role, User> participants;
...
}
public User{
@ManyToMany(mappedBy = "participants")
private List<Task> tasks;
...
}
Также подумайте, нужно ли вообще, чтобы эти отношения были двунаправленными.Похоже, не так много случаев, когда вам нужен список всех задач, в которых участвует конкретный пользователь.Возможно, вам вообще не нужны эти отношения на стороне User
, и вы можете вместо этого использовать запросы.