游戏
::id crosses_player_id noughts_player_id...
玩家
id alignment game_id
由于只有2个玩家,我不需要创建一个单独的表,所以我这样做是这样的:
@Entity @Table(name = "games") public class Game { @Id @GeneratedValue private int id; @OneToOne(mappedBy = "game") @JoinColumn(name = "crosses_player_id") private Player crossesPlayer; @OneToOne(mappedBy = "game") @JoinColumn(name = "noughts_player_id") private Player noughtsPlayer; private List<Move> moves = new ArrayList<>(); private List<Field> fields = new ArrayList<>(); ...
@Entity @Table(name = "players") public class Player { @ManyToOne @JoinColumn(name="user_id", nullable=false) private User user; private enum Alignment { NOUGHTS, CROSSES }; private Alignment alignment; @OneToOne(mappedBy = ?) private Game game; ...
但是我不确定在
@OneToOne(mappedBy = ?)
类的Player
中放入什么。
我找到的最接近的答案是这个:
https://stackoverflow.com/a/13944195/4759176
class TeamPlay { @ManyToOne Team homeTeam; @ManyToOne Team awayTeam; } class Team { @OneToMany(mappedBy="homeTeam") Set<TeamPlay> homeTeamPlays; @OneToMany(mappedBy="awayTeam") Set<TeamPlay> awayTeamPlays; }
但是
Team
类可能有很多可能的游戏,而在我的情况下,一位玩家只有1个游戏。玩家基本上就是用户的ID,游戏的ID和所处的高度(无棋或十字),并且在游戏结束后,再也不会从任何新游戏中再次引用同一位玩家。也许我应该这样:
玩家
:不存在,也可以是十字架玩家,因此这些字段之一始终为空吗?@OneToOne(mappedBy = "crossesPlayer") private Game crossesGame; @OneToOne(mappedBy = "noughtsPlayer") private Game noughtsGame;
但是,一个玩家可以only
假设我有一个Noughts and Crosses游戏(井字游戏):游戏:id crosses_player_id noughts_player_id ...玩家:id对齐game_id因为只有2个玩家,所以我认为没有必要...
@ManyToOne(optional=false)
@JoinColumn(name="game_id")
private Game game;