У меня есть 4 вещи для подключения и хранения, но я не уверен, как использовать аннотацию для наложения ограничений.Итак, вот сценарий:
У меня есть проект, менеджер, участник и роль.Это четыре объекта или три, так как менеджер также является участником.Роль имеет разные роли, такие как менеджер, участник, pointOfContact, руководитель проекта и т. Д. Я не уверен, нужна ли мне роль или нет, но да, есть несколько ролей.
Теперь вот ограничения:
1) Проект может поддерживать только ОДНОГО человека с ролью владельца.
2) Только существующий владелец или PowerUser,Администратор может менять владельцев проекта.
3) Передача права собственности от пользователя X пользователю Y автоматически добавляет пользователя X в качестве участника.
4) Любое количество участников может быть добавлено в проект..
5) С человеком может быть связана одна или несколько ролей.
Я не уверен, как спроектировать его с помощью JPA.Я пробовал это:
@Entity
@Table(name = "PROJECT")
public final class PROJECT {
/**
* The Serialization id.
*/
private static final long serialVersionUID = 1L;
@ManyToOne(cascade = CascadeType.PERSIST)
@JoinTable(name = "OWNER_PROJECT_REL",
joinColumns = @JoinColumn(name = "PROJECT_ID"),
inverseJoinColumns = @JoinColumn(name = "OWNER_ID")
)
private SomeDTO owner;
@ManyToMany(cascade = CascadeType.PERSIST)
@JoinTable(name = "PARTICIPANT_PROJECT_REL",
joinColumns = @JoinColumn(name = "PROJECT_ID"),
inverseJoinColumns = @JoinColumn(name = "PARTICIPANT_ID")
)
private List<Participant> participants = new ArrayList<>();
Но здесь я делаю владельца и участника двух разных классов Java.Я не уверен, что это хороший дизайн.
Должен ли я делать только класс участника и рассматривать владельца как участника?
Где поместится Ролевый стол?
Сколько таблиц я должен использовать, учитывая, что пространство не является проблемой?
Как написать эту вещь в JPA, так как я довольно новичок в этом?
Спасибо!