У меня назначена система встреч, и у меня возникли проблемы со структурой mysql и структурой модели.Будет два типа пользователей (по крайней мере): клиент и поставщик.Клиенты будут назначать встречи для выбранной работы с доступным поставщиком для этой работы.Поставщики смогут добавлять себя, чтобы выбрать работу, которая будет доступна для клиентов.Наконец, будет назначена встреча с датой начала, датой окончания и внешними ключами для customer_id и provider_id (от пользователей таблицы) и work_id (от работы таблицы).Таким образом, в таблице встреч у меня будет 2 FK для одного и того же лица (пользователя), но один будет клиентом, а другой - провайдером.Какое отображение должны иметь поля пользователя и клиента в классе назначений и назначения полей в классе пользователей?Я буду дифференцировать пользователей по роли с таблицей users_role.Возможно ли сделать это только с одной общей таблицей для пользователей?
вот ссылка на схему mysql: https://i.imgur.com/OdKfVdh.png
Appointment.class
@Entity
@Table(name="appointments")
public class Appointment extends BaseEntity {
@Column(name="start")
@DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm")
private LocalDateTime start;
@DateTimeFormat(pattern="yyyy-MM-dd'T'hh:mm")
@Column(name="end")
private LocalDateTime end;
@ManyToOne
@JoinColumn(name="work_id")
private Work work;
??????
private User customer;
??????
private User provider;
}
User.class:
@Entity
@Table(name="users")
public class User extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "username")
private String userName;
@Column(name = "password")
private String password;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@Column(name = "email")
private String email;
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(name = "users_roles", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id"))
private Collection<Role> roles;
??????
private List<Appointment> appointments;
@ManyToMany
@JoinTable(name="works_providers", joinColumns=@JoinColumn(name="id_user"), inverseJoinColumns=@JoinColumn(name="id_work"))
private List<Work> works;
}