簡體   English   中英

同一實體的多種表示形式正在被合並

[英]Multiple representations of the same entity are being merged

我有以下兩個具有多對多關系和級聯類型合並的實體。

@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.E​​LException:org.springframework.dao.InvalidDataAccessApiUsageException:同一實體[com.example.outgoing.Entity.Language#1]的多個表示形式正在被合並。 分離:[com.example.outgoing.Entity.Language@6c0d5d52]; 分離:[com.example.outgoing.Entity.Language@39afc789]; 嵌套異常是java.lang.IllegalStateException:同一實體[com.example.outgoing.Entity.Language#1]的多種表示形式正在被合並。 分離:[com.example.outgoing.Entity.Language@6c0d5d52]; 分離:[com.example.outgoing.Entity.Language@39afc789]

同樣,如果我使用以下代碼更改上述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);

如何擺脫這個錯誤?

您有一個具有重復的語言ID的數組,應該避免這種情況。

為避免此問題,您只需要檢查您的語言列表中是否已包含語言對象。

if (!stammdaten.getLanguages().contains(selectedLanguage)) {
    stammdaten.getLanguages().add(selectedLanguage);
}

如果語言對象的equals()可以按需要工作,則此方法有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM