JPA oneToMany 与 List 和 JoinTable

JPA oneToMany with List and JoinTable

我有一个锦标赛 class 和一个会员 class。

只有锦标赛有成员(这是我需要的信息)所以在锦标赛中 class 我有:

@OneToMany(fetch = FetchType.LAZY, 
        cascade = CascadeType.PERSIST, orphanRemoval=true)
@JoinTable(name = "tournament_players", 
joinColumns={@JoinColumn(name="tournament_id", nullable=false)},
inverseJoinColumns={@JoinColumn(name="member_id", nullable=false)})
List<Member> players;

ID 是自动生成的整数。

当我只有一场比赛时,设置成员时一切正常。

如果我将锦标赛 1 中已经存在的成员添加到锦标赛 2 中,那么我会得到约束违规,根据我所读的内容,这是正确的。

 Unique index or primary key violation: "UK_9JMTVNIY5RJ4A9S9XCI40NQGJ_INDEX_9 ON PUBLIC.TOURNAMENT_PLAYERS(TOURNAMENT_ID)

我的问题是我的问题的正确解决方案是什么?

我认为你真正需要的是ManyToMany关系。

因为在你的情况下,一个 Tournament 可以有很多 Member(s),而 Member 可以跟很多 Tournament(s)。

如果您使用 OneToMany,JPA 提供程序将检查 Member 是否已经分配了 Tournament,如果为真

,将无法添加