gpt4 book ai didi

java - 两个表可以互相引用吗?

转载 作者:行者123 更新时间:2023-12-01 06:08:14 24 4
gpt4 key购买 nike

我有两个表,Team 和 Player(一对多)。

我的第一个问题,让两个表像这样互相引用是不是不好的做法?

Team: (id (pk), name, captain_id (fk))
Player: (id (pk), name, team_id (fk))

我正在使用 JPA 和 hibernate,并进行以下设置。

@Entity
public class Player {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;

private String name;

@ManyToOne
@JoinColumn(name="team_id")
private Team team;
}

@Entity
public class Team {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;

private String name;
private int captainId;


@OneToMany(fetch = FetchType.EAGER, cascade = {CascadeType.ALL})
private Set<Player> players;

在创建新团队时,创建该团队的玩家的 ID 将作为参数传递。它工作正常,但手动执行感觉不太好。

public void createNewTeam(Player player, Team team){

Set<Player> players = new HashSet<Player>();
Team team = new Team("Cowboys", player.getId(), players); //player.getId is the captain()

player.setTeam(team);
players.add(player);

PersistenceUtil.merge(team);
}

有没有办法以某种方式更改实体以自动执行此操作?或者我需要更换表格吗?

我一直在尝试使用 gson 将对象转换为 JSON,但没有成功。我认为这与循环引用有关。 (是的,我是一个陷得太深的菜鸟!)

最佳答案

您在此处描述的内容:

Team: (id (pk), name, captain_id (fk))
Player: (id (pk), name, team_id (fk))

这是错误的,不应该这样配置。

如果您想在 2 个实体之间配置一对多关联,

那么正确的方法是:

首先,决定哪个实体是Many,哪个实体是Single(One),在我们的例子中,这非常简单。每个玩家属于一个团队,每个团队有许多玩家。

团队 --> 一个

玩家 --> 很多

第二,如果您尝试用表格来表示这种关联,那么许多(玩家)应该拥有一个(团队)的 fk,并且团队不应该持有玩家的 fk,应该只有一个fk 在这个协会中。

为什么?

假设您的队伍 table 上有一支队伍,PK 为 211,该队伍有很多玩家,比如说 ID 为 100、101、102 的玩家。

团队 table 上不能有 3 条记录(针对 3 个不同的玩家 100、101、102)具有相同的 PK 211

关于java - 两个表可以互相引用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40429938/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com