2016-10-01 41 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