Java 如何还原@ManyToOne映射并使另一个类成为关系的所有者

Java 如何还原@ManyToOne映射并使另一个类成为关系的所有者,java,hibernate,Java,Hibernate,假设我们有两个类: Player @Data @AllArgsConstructor @NoArgsConstructor @Builder @Entity @Table(name = "players") public class Player { @Id @GeneratedValue private Long id; private String name; @ManyToOne(cascade = CascadeType.PERSIST) @JoinColu

假设我们有两个类:

Player

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
@Table(name = "players")
public class Player {

  @Id
  @GeneratedValue
  private Long id;

  private String name;

  @ManyToOne(cascade = CascadeType.PERSIST)
  @JoinColumn(name = "team_id")
  private Team team;

}
团队

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
@Table(name = "teams")
public class Team {

  @Id
  @GeneratedValue
  private Long id;

  private String name;

  @OneToMany(mappedBy = "team", fetch = FetchType.EAGER)
  @EqualsAndHashCode.Exclude
  @ToString.Exclude
  private Set<Player> players;

}
@数据
@AllArgsConstructor
@诺尔格构装师
@建筑商
@实体
@表(name=“teams”)
公开课小组{
@身份证
@生成值
私人长id;
私有字符串名称;
@OneToMany(mappedBy=“team”,fetch=FetchType.EAGER)
@EqualsAndHashCode.Exclude
@ToString.Exclude
私人场地球员;
}

在上述POJO中,玩家是实体的所有者。在这方面,现在我可以在创建
Player
实体时持久化
Team
,但我希望还原此场景并使
Team
成为关系的所有者。问题是,当我恢复这种关系时,我不能在
@ManyToOne
侧边类比使用
mappedBy
。问题来了,如何还原此映射关系并使
团队
POJO成为该关系的所有者

这是对的。要回答您的问题,只需将cascade属性移动到
Team
,并将其从
Player
中删除即可。当
团队
创建完成后,
玩家
也将被创建。

您不能。在一个双向的一方市场中,多方总是拥有方。这并不意味着你不能在OneToMany上级联操作,从而在你坚持团队的同时坚持层。我相信这就是答案。要添加,外键是从多个side@JBNizet非常感谢您的及时答复。如果我理解正确,使用@OneToMany侧的
cascade=CascadeType.PERSIST
,我将能够在创建球员时保留球队?不。当你保留球队时,你将保留球员。“持久化”操作从团队级联到其玩家。@JBNize好的,非常感谢。让我总结一下。许多方面总是关系的主人。此外,我们可以通过使用第二方的
cascadype
标志来操纵它们的行为。例如,在我的场景中,如果我将从玩家类中的
@manytone(cascade=CascadeType.PERSIST)
中删除
cascade=CascadeType.PERSIST
,并将其传递给团队类中的关系@OneToMany,如果我将持久化,那么团队成员也将被创建,对吗?非常感谢您的回复。我明天早上再查。我还有一个问题,那就是:
cascade=CascadeType.persistent
两边都使用(@manytone和@OneToMany)是一种不好的做法吗?如果我理解的话,这会导致这样的情况,如果我坚持球队,球员就会坚持,反之亦然,对吗?