2016-03-05 101 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'對方 –