2016-10-01 88 views
1

我有這兩個實體有多對多的關係。JPA:如何堅持多對多的關係

@Entity 
public class User { 

    @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) 
    private List<User> users = new ArrayList<User>(); 
} 

@Entity 
public class Language { 
    @ManyToMany(mappedBy = "languages") 
    private List<User> users = new ArrayList<User>(); 
} 

我已經在我的語言表中保存了20種語言。現在,我想要創建一個用戶,並在語言表中將該用戶與第一語言聯繫起來。所以我做了這樣的事情

Language selectedLanguage = languageService.findById(1); 
    stammdaten.getLanguages().add(selectedLanguage); 
    stammdatenService.save(stammdaten); 

但是,這給了我錯誤org.hibernate.PersistentObjectException: detached entity passed to persist: com.example.outgoing.Entity.Language。那麼我怎樣才能挽救這麼多關係。有一點需要注意:我不想添加新的語言。我想用已經創建的語言添加新用戶。

+0

您的代碼中存在錯誤,我認爲...用戶實體應該有List 而不是? –

回答

2

CascadeType.ALL替換爲CascadeType.MERGE

另外,在兩個實體上添加setter。

+1

您的解決方案有效,但我不明白爲什麼。我認爲'CascadeType.ALL'涵蓋了所有合併,持續等 – asdlfkjlkj