2016-10-01 5 views
1

persistent Ich habe diese 2 Entität mit vielen zu vielen Beziehung.JPA: wie man viele zu vielen Relationen

@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>(); 
} 

Ich habe bereits 20 Sprachen in meiner Sprachtabelle gespeichert. Jetzt möchte ich einen Benutzer erstellen und diesen Benutzer mit der ersten Sprache in der Sprachtabelle verknüpfen. Also habe ich so etwas wie dieses

Language selectedLanguage = languageService.findById(1); 
    stammdaten.getLanguages().add(selectedLanguage); 
    stammdatenService.save(stammdaten); 

Aber das gibt mir org.hibernate.PersistentObjectException: detached entity passed to persist: com.example.outgoing.Entity.Language Fehler. Wie kann ich das viele zu vielen Beziehungen speichern? Eine Sache, die hier zu beachten ist: Ich möchte keine neue Sprache hinzufügen. Ich möchte neue Benutzer mit bereits erstellten Sprachen hinzufügen.

+0

Da ist etwas in Ihrem Code falsch Ich denke ... Die Benutzer-Entität sollte Liste stattdessen haben? –

Antwort

2

Ersetzen Sie CascadeType.ALL durch CascadeType.MERGE.

Fügen Sie außerdem Setter für beide Entitäten hinzu.

+1

Ihre Lösung funktioniert, aber ich verstehe nicht warum. Ich dachte, 'CascadeType.ALL' deckt alle wie merge, persisting etc – asdlfkjlkj

Verwandte Themen