2017-04-16 15 views
1

私は以下のモデルを持っているを複製します:JPA多対多の挿入は値

user.getRoles().add(role) and repository.save(new User()) 

どちらの方法でも、ロールはデータベースに再度挿入されます。

例えば

これらは、DB内の既存の役割している場合:

ID Name 
1 ADMIN 
2 USER 

と私はADMINの役割を持つユーザーを挿入し、それが再び挿入されます。

ID Name 
1 ADMIN 
2 USER 
3 ADMIN 

どのようにすることができます私はこれを解決する?

私はすでにpostで解決策を試しましたが、うまくいきませんでした。

+0

どのように役割のインスタンスを取得しました:あなたはあなたのような何かをする必要があります春のデータを使用すると仮定すると

? – Cherif

答えて

1

ロールの名前はエンティティの識別子でも固有でもありません。

Role role = new Role(); 
role.setName("ADMIN"); 
user.getRoles().add(role); 
repository.save(user); 

JPAは、あなたが新しいオブジェクトを渡され、それが@GeneratedValue注釈に基づくため、新たなIDを生成することを仮定します:あなたのような何かをするのであれば、roleオブジェクトのidはnullになります。

Role role = roleRepository.findByName("ADMIN"); 
user.getRoles().add(role); 
関連する問題