【发布时间】:2020-04-28 23:24:12
【问题描述】:
我有一个用户、玩家、CoopGames 和 CoopGamesPlayers 表。从概念上讲,我本质上是在尝试重新创建 Order/OrderProducts 类型关系。在我的例子中,每个 CoopGamesPlayers 条目都有 CoopGame id 和 Player id 作为其键。但是,我被卡住了,因为在我的情况下,我的 Player 类本身有一个复合主键:生成的玩家 ID,以及用户 ID 外键。我有点迷路了。我已经按照 Order.OrderProducts 的教程进行了设置,但我不是 JPA 专家,也从未真正在 JoinTable 中使用过复合键。代码:
public class PlayerPK implements Serializable {
@ManyToOne(optional = false, fetch = FetchType.EAGER)
@JoinColumn(name = "id")
private Player player;
@ManyToOne(optional = false, fetch = FetchType.EAGER)
@JoinColumn(name = "userid")
private User user;
}
@Entity
@Table(name = "players")
public class Player implements Serializable {
@EmbeddedId
private PlayerPK pk;
@Column(name = "image")
private String image;
}
@Entity
@Table(name = "coop_games")
public class CoopGame {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@OneToMany(mappedBy = "pk", fetch = FetchType.EAGER)
private List<CoopGamesPlayers> players;
}
public class CoopGamesPlayersPK implements Serializable {
@JsonBackReference
@ManyToOne(optional = false, fetch = FetchType.EAGER)
@JoinColumn(name = "coop_game_id")
private CoopGame game;
@ManyToOne(optional = false, fetch = FetchType.EAGER)
@JoinColumns({
@JoinColumn(name="playerid", referencedColumnName="id"),
@JoinColumn(name="userid", referencedColumnName="userid")
})
@MapsId("pk")
private Player player;
}
@Entity
@Table(name = "coop_games_players")
public class CoopGamesPlayers {
@EmbeddedId
private CoopGamesPlayersPK pk;
public CoopGamesPlayers(CoopGame game, Player player) {
pk = new CoopGamesPlayersPK();
pk.setGame(game);
pk.setPlayer(player);
}
}
@Entity
@Table(name = "coop_games")
public class CoopGame {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@OneToMany(mappedBy = "pk", fetch = FetchType.EAGER)
private List<CoopGamesPlayers> players;
}
【问题讨论】:
标签: java hibernate spring-boot jpa spring-data-jpa