2012-04-07 7 views
1

Folgendes Szenario bestehen:JPA nicht Kinder

Ich habe

Benutzerobjekt:

... 
@Column(name = "TITLE") 
private String title; 
@NotNull 
@NotEmpty 
@Column(name = "STREET_ADRESS") 
private String streetAdress; 
@NotNull 
@NotEmpty 
@Column(name = "CITY") 
private String city; 

...

@OneToMany(fetch = FetchType.EAGER) 
@NotNull 
@NotEmpty 
protected Set<Role> roles = new HashSet<Role>(); 

    Role roleDaoById = roleService.getRoleByName(RoleName.User.toString()); 
    Set<Role> roles = new HashSet<Role>(); 
    roles.add(roleDaoById); 
    member.setRoles(roles); 
    member.setSuspend(false); 
    member.setPlayer(true); 
memberService.addMember(member); 

Mein Problem ist, dass die Rollen bereits verfügbar sind in die Datenbank. Deshalb lade ich sie über roleService. Ich rufe memberService.addMember und das ruft mein Dao mit em.persist (Mitglied). Aber dieser Aufruf speichert die Rolle erneut und ich erhalte einen doppelten Schlüsselfehler für das Rollenobjekt. Ich möchte nur das Mitglied speichern und dann den Join-Tabelleneintrag für die Rolle vornehmen.

Was kann ich tun?

+0

Hilft dies [http://stackoverflow.com/questions/7903800/hibernate-inserts-duplicates-into-a-onetomany-collection)? – nobeh

+0

Danke für deine Antwort, aber weißt du nicht, wie mir das helfen könnte? –

+0

Konkret können Sie versuchen [diese Antwort] (http://stackoverflow.com/a/7905027/248082)? – nobeh

Antwort

0

Ihre Beziehung Benutzer - Rolle ist Viele-zu-Viele (ein Benutzer hat mehrere Rollen, mehrere Benutzer können die gleiche Rolle haben), aber Sie haben ihn mit Eins-zu-Vielen versehen.