Отображение полей в связе многие ко многим в Hibernate

246
21 июля 2017, 02:09

У меня есть сущности "событие" и "участник". Связь многие-ко-многим. У каждого участника должен быть билет на событие.

Выглядит это вот так:

Эти сущности в 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, которое будет зависеть от конкретного события ? Как это будет выглядеть ?

Answer 1

В данном примере нет отношения many to many. Такое отношение показывает только связь между разными строками таблиц и не может содержать какие то еще данные.

Вру, всетаки и такое соотношение является many to many, но не совсем каноничное. В любом случае, в разрезе ORM это ничего не меняет.

Тут только одно решение: вам нужно реализовать саму таблицу action_member как сущность и уже к ней пролинковать Action и Member.

READ ALSO
Подскажите что поправить в коде задачи про массивы

Подскажите что поправить в коде задачи про массивы

Дана задача - Cоздать двумерный массив из 7 строк по 4 столбца в каждой из случайных целых чисел из отрезка [-5;5]Вывести массив на экран

173
проблемы с кодировкой в swing

проблемы с кодировкой в swing

есть JTextPane и JEditorPaneв первом установлен контекст text/html, во втором - просто текст для написания html кода

222
Какие есть варианты обмана DoubleProperty в javafx

Какие есть варианты обмана DoubleProperty в javafx

Необходимо, чтобы событие изменения возникало при set даже если новое значение равно старому

177
Импорт jar в Java вручную

Импорт jar в Java вручную

Как можно вручную (без использования редакторов типа IntelliJ IDEA) импортировать jar-файл?

159