JPA:如何坚持多对多的关系

时间:2016-10-01 01:51:38

标签: 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>();
}

我的语言表中已经保存了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。那么我怎么能保存这么多关系呢。有一点需要注意:我不想添加新语言。我想添加已创建语言的新用户。

2 个答案:

答案 0 :(得分:2)

CascadeType.ALL替换为CascadeType.MERGE

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

答案 1 :(得分:2)

我通过JPA中的@ManyToMany注释定义了多对多关系。

我已经写了一个要插入的代码示例。

我认为这张图片可以帮助您理解

enter image description here