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
,如果为真
,将无法添加
我有一个锦标赛 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
,如果为真