JPA:如何坚持多对多关系

asd*_*lkj 2 java hibernate 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>();
}
Run Code Online (Sandbox Code Playgroud)

我的语言表中已经保存了 20 种语言。现在,我想创建一个用户并将该用户与语言表中的第一种语言相关联。所以我做了这样的事情

    Language selectedLanguage = languageService.findById(1);
    stammdaten.getLanguages().add(selectedLanguage);
    stammdatenService.save(stammdaten);
Run Code Online (Sandbox Code Playgroud)

但这给了我错误org.hibernate.PersistentObjectException: detached entity passed to persist: com.example.outgoing.Entity.Language。那么我怎样才能保存这种多对多的关系。这里要注意一件事:我不想添加新语言。我想用已经创建的语言添加新用户。

Mat*_*aga 5

替换CascadeType.ALLCascadeType.MERGE

此外,在两个实体上添加 setter。

  • 您的解决方案有效,但我不明白为什么。我认为 `CascadeType.ALL` 涵盖了所有像合并、持久化等 (8认同)