У меня есть сущности "событие" и "участник". Связь многие-ко-многим. У каждого участника должен быть билет на событие.
Выглядит это вот так:
Эти сущности в Hibernate:
@Data
@NoArgsConstructor
@Entity(name = "action")
public class Action {
@Id
@GeneratedValue
private UUID id;
private String name;
@ManyToOne
@JoinColumn(name = "organization_id")
@JsonIgnore
private Organization organization;
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(name = "action_member", joinColumns = { @JoinColumn(name = "action_id")}, inverseJoinColumns = {@JoinColumn(name = "member_id")})
@JsonIgnore
private List<Member> members;
@CreationTimestamp
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "created_at")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd hh:mm:ss", timezone = "Europe/Moscow")
private Date createdAt;
}
@Data
@NoArgsConstructor
@Entity(name = "member")
public class Member {
@Id
@GeneratedValue
private UUID id;
private String email;
private String phone;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(name = "action_member", joinColumns = { @JoinColumn(name = "member_id")}, inverseJoinColumns = {@JoinColumn(name = "action_id")})
private List<Action> actions;
@CreationTimestamp
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "created_at")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd hh:mm:ss", timezone = "Europe/Moscow")
private Date createdAt;
}
Проблема в том, что я не понимаю как правильно отобразить в этой схеме билет. Могу я как-то всем участникам добавить поле ticket, которое будет зависеть от конкретного события ? Как это будет выглядеть ?
В данном примере нет отношения many to many. Такое отношение показывает только связь между разными строками таблиц и не может содержать какие то еще данные.
Вру, всетаки и такое соотношение является many to many, но не совсем каноничное. В любом случае, в разрезе ORM это ничего не меняет.
Тут только одно решение: вам нужно реализовать саму таблицу action_member как сущность и уже к ней пролинковать Action и Member.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости