3个实体之间的映射

问题描述 投票:0回答:1

我有3个实体。游戏,纪律和玩家。 (为简单起见,可以说它们都具有id和name属性)

这个想法是:АGAME可以有多个DISCIPLINEАPLAYER要参加不同的DISCIPLINE比赛,可以多次申请。换句话说,玩家与GAME之间存在ManyToMany关系,而GAME与DISCIPLINE之间具有OneToMany关系。我需要的是一种使用具体的DISCIPLINE将玩家映射到游戏的方法我很困惑如何实际创建具有这种映射的实体。我可以想象一张桌子看起来像这样:

    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中映射它们

spring hibernate jpa hibernate-mapping
1个回答
0
投票
@Entity
@Getter
@Setter
@Table(name = "players")
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 = "players_games",
                joinColumns = @JoinColumn(name = "player_id"),
                inverseJoinColumns = @JoinColumn(name = "game_id"))
    private List<Game> games;
}
@Entity
@Getter
@Setter
@Table(name = "games")
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 = "disciplines")
public class Discipline {
    @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 = "disciplines_games",
                joinColumns = @JoinColumn(name = "discipline_id"),
                inverseJoinColumns = @JoinColumn(name = "game_id"))
    private List<Game> games;
}

这看起来不错。当然,您可以根据需要使任何一种关系都是双向的。

© www.soinside.com 2019 - 2024. All rights reserved.