Отображение между 3 объектами - PullRequest
0 голосов
/ 24 марта 2020

У меня есть 3 лица. ИГРА, ДИСЦИПЛИНА и ИГРОК. (и для простоты предположим, что все они имеют свойства id и name)

Идея состоит в том, что:
А ИГРА может иметь несколько ДИСЦИПЛИН
ИГРОК может подать заявку на ИГРУ несколько раз, если ее будет соревноваться в разных дисциплинах.
Другими словами, у нас есть отношения ManyToMany между ИГРОКОМ и ИГРОЙ, и у нас есть отношения OneToMany между ИГРОЙ и ДИСЦИПЛИНОЙ.
Мне нужен способ привязать ИГРОКА к ИГРЕ с конкретной ДИСЦИПЛИНОЙ
Я запутался, как на самом деле создавать сущности, чтобы иметь такое отображение. То, что я могу себе представить, чтобы таблица выглядела примерно так:

    game_id |   discipline_id   |   player_id   |
    1       |   1               |   1           |
    1       |   2               |   1           |
    2       |   2               |   2           |
    2       |   3               |   3           |
    2       |   3               |   1           |

, или я думаю, что было бы лучше всего иметь такую ​​структуру в db: enter image description here

Но я не знаю, как создавать такие объекты и как отображать их в java

1 Ответ

0 голосов
/ 24 марта 2020
@Entity
@Getter
@Setter
@Table(name = "player")
public class Player {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Integer id;

    @Column(name = "name", nullable = false)
    private String name;

    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(name = "player_games",
                joinColumns = @JoinColumn(name = "player_id"),
                inverseJoinColumns = @JoinColumn(name = "game_with_discipline"))
    private List<GameDiscipline> gamesWithDiscipline;
}
@Entity
@Getter
@Setter
@Table(name = "game")
public class Game {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Integer id;

    @Column(name = "name", nullable = false)
    private String name;
}
@Entity
@Getter
@Setter
@Table(name = "discipline")
public class Discipline {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Integer id;

    @Column(name = "name", nullable = false)
    private String name;
}
@Entity
@Getter
@Setter
@Table(name = "game_disciplines")
public class GameDiscipline {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Integer id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "game_id", nullable = false)
    private Game game;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "discipline_id", nullable = false)
    private Discipline discipline;
}

Это выглядит правильно. Конечно, вы можете сделать любое из отношений двунаправленным, если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...