2016-03-05 176 views
0

我有一个Tournament类和一个Member类。JPA oneToMany with List and JoinTable

只有比赛有成员(即我需要的信息),所以在比赛中I类有:

@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) 

我的问题是什么是适当的解决我的问题?

+0

试试这个>> http://www.objectdb.com/api/java/jpa/OneToMany –

回答

0

我觉得你真的需要的是ManyToMany的关系。

因为在你的情况下,一个Tournament可以有很多Member(S)和Member可以按照许多Tournament(S)。

如果使用OneToMany,JPA提供者会检查是否已经分配了MemberTournament,并且将无法添加,如果它真的

+0

但是,我不希望从会员参加锦标赛吗?我如何避免让同一个成员的多条线路进入同一锦标赛? – Manos

+0

冬眠?没有看到在OP –

+0

@BillyFrost哦,是的,谢谢指出。编辑到JPA提供商:)。 @Manos你需要有一个'@ JoinTable'来映射'Tournament'和'Member'对方 –