我有以下兩個實體,具有多對多關係和級聯類型合併。同一實體的多個表示正在合併
@Entity
public class Stammdaten {
@ManyToMany(cascade = CascadeType.MERGE, fetch = FetchType.EAGER)
private List<Language> languages = new ArrayList<Language>();
}
@Entity
public class Language {
@ManyToMany(mappedBy = "languages")
private List<Stammdaten> stammdatens = new ArrayList<Stammdaten>();
}
和我的Stammdaten保存爲
@ManagedProperty("#{stammdatenService}")
StammdatenService stammdatenService;
private List<Language> languages;
for (Integer language_id : items) {
Language selectedLanguage = languageService.findById(language_id);
stammdaten.getLanguages().add(selectedLanguage);
}
stammdatenService.save(stammdaten);
如果項目規模更是超過1,然後我得到這個錯誤
javax.el.ELException:org.springframework。 dao.InvalidDataAccessApiUsageException:正在合併同一個實體[com.example.outgoing.Entity.Language#1]的多個表示。分開:[[email protected]];分開:[[email protected]];嵌套異常是java.lang.IllegalStateException:正在合併同一個實體[com.example.outgoing.Entity.Language#1]的多個表示。分開:[[email protected]];分離:[[email protected]]
同樣,如果我改變上述for循環用下面的代碼
Language selectedLanguage = languageService.findById(1);
stammdaten.getLanguages().add(selectedLanguage);
Language selectedLanguage1 = languageService.findById(2);
stammdaten.getLanguages().add(selectedLanguage1);
這工作得很好。但是,如果我有2個具有相同語言ID的語言對象,我也會得到相同的錯誤。所以這段代碼也給出了同樣的錯誤。
Language selectedLanguage1 = languageService.findById(Integer.parseInt ("2"));
stammdaten.getLanguages().add(selectedLanguage1);
Language selectedLanguage2 = languageService.findById(Integer.parseInt ("2"));
stammdaten.getLanguages().add(selectedLanguage2);
我該如何擺脫這個錯誤?
我的第一個循環出了什麼問題。如果我使用上面的for循環,並且即使沒有重複的language_id,它總會給我提到的錯誤。 – asdlfkjlkj
* items *中的重複只是該bug的可能性,另一個是當您從db中加載對象時,您已經擁有關聯。 –