【发布时间】:2021-12-21 16:09:55
【问题描述】:
我正在开发一个具有 2 个域 JPA 实体的 SpringBoot API。其中一个实体是“玩家”,它存储有关游戏玩家的信息,并包括他们的“id”,它是自动生成和自动递增的。
“游戏”实体存储有关以前玩过的游戏的信息,并具有自动生成和自动递增的 id 以及“gameId”。
但是,我还想将参与该游戏的所有“玩家”“id”存储在“游戏”实体中。
因此,当一个 Game 对象被创建时,它需要 2 个单独的 Player 实体的“id”。
在这种情况下,OneToMany 关系是否有效?哪里 Player 在 'id' 字段上方用 @OneToMany 注释,而 Game 在 'playerId' 字段上方用 @ManyToOne 注释?
有点像这样:
public class Game {
@Id
@GeneratedValue
private Long gameId;
@ManyToOne()
private Long playerId;
//Should this be multiple different fields like below?
@ManyToOne()
private Long player1Id;
@ManyToOne()
private Long player2Id;
@ManyToOne()
private Long player3Id;
@ManyToOne()
private Long player4Id;
}
public class Player {
@Id
@GeneratedValue
@OneToMany()
private Long id;
private String firstName;
private String lastName;
private String email;
}
【问题讨论】:
-
我建议阅读有关该主题的教程,例如this one from
baeldung.com -
我会说玩家 游戏是多对多
-
@SimonMartinelli 是的,这更有意义,这就是为什么当我尝试实现它时,我意识到每个玩家只能玩 1 场比赛,谢谢!
-
您缺少 Hibernate ORM 的 Object 部分!就像@Turing85 所说,您绝对应该从基础开始。如果你不喜欢 baeldung.com,Vlad Mihalcea 也有很好的教程。
-
“但是,我还想将参与该游戏的所有 'Players' 'id' 存储在 'Game' 实体中。” ... 在关系数据库中,您不会像“数据之间的关系”那样考虑“将数据存储在某物中”。事实上,在 RDBMS 中建立关系而不将任何数据从一个数据集“存储”到另一个数据集(即使用桥接表或联结表)是完全正常的。
标签: java spring spring-boot jpa spring-data-jpa