2016-10-01 10 views
1

多対多の関係を持つ2つのエンティティがあります。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の言語が言語表に保存されています。今、私はユーザーを作成し、そのユーザーに言語表の第1言語を関連付ける必要があります。だから私はこのような何かをした

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

あなたのコードには何か問題があります。ユーザーエンティティにリストが必要ですか? –

答えて

2

CascadeType.ALLCascadeType.MERGEに置き換えます。

また、両方のエンティティにセッターを追加します。

+1

あなたのソリューションは動作しますが、私はその理由を理解していません。私は 'CascadeType.ALL'はすべてのマージ、永続化などをカバーすると思った – asdlfkjlkj