Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 21246|Odpověď: 0

[Zdroj] jiný objekt se stejnou identifikační hodnotou už byl přiřazen s...

[Kopírovat odkaz]
Zveřejněno 01.07.2016 10:48:52 | | | |
K relaci již byl přiřazen jiný objekt se stejnou identifikační hodnotou: 398fdbba-57b8-4d3d-b84b-4c0c0b497f02, entity: XXX



S touto chybou jsem se setkal celkem dvakrát a nikdy jsem nenašel dobré řešení, a tato chyba se stala

Důvod je pravděpodobně dobře známý, protože v hibernaci jsou ve stejné relaci dvě identická loga

Pokud se však jedná o jinou entitu, tato chyba se nahlásí při spuštění operace saveOrUpdate(object).

Hehe, možná řekneš, že mezi tím, co říkáš, a tím, co neříkáš, není rozdíl, přiznávám, hehe, neznám detaily

Proč k této chybě došlo, jinak by se dlouho nevyřešila, teď uveďte dočasnou chybu

Řešením je dát lidem jako já, kteří nemají jak najít příčinu, možnost pokračovat v implementaci

(Samozřejmě je to správné, ale nezačíná to příčinou)
    Ve skutečnosti je tento problém velmi jednoduché vyřešit, stačí provést operaci session.clean()

Ale provedl jsi operaci saveOrUpdate(object) po operaci clean, což je možné

"Našel jsem dvě reprezentace stejné sbírky", hledal jsem spoustu informací.

Neexistuje žádné dobré vysvětlení, kterému tento článek nejvíce pomáhá

http://opensource.atlassian.com/projects/hibernate/browse/HHH-509。

Nakonec to lze vyřešit metodou session.refresh(object), přičemž když objekt není

Pokud jde o objekt s daty v databázi, nelze použít faktor session.refresh(object)

Obnova znamená znovu načíst objekt z hibernační relace, pokud v relaci není žádný objekt

Pokud se tento objekt vyskytuje, bude nahlášena chyba, takže je potřeba posoudit před použitím saveOrUpdate(object).

Rozbij to

    Samozřejmě nejjednodušším řešením tohoto problému je použít merge(), který je součástí Hibernate.

Metoda. Nicméně vždy mám pocit, že když narazím na problémy, používám velmi užitečnou metodu, která je součástí tohoto softwaru

(ve srovnání se save OrUpdate(), save(), update()) působí velmi nepříjemně.
    Později jsem také zjistil, že tato chyba se často objevuje při mapování jeden ku více a mnohonásobně, prosím, buďte zde

Buďte opatrní při používání mapování jeden ku mnohým a mnohonásobným
Řešení problémů a řešení hibernace
1、Jiný objekt se stejnou hodnotou identifikátoru byl již přiřazen k relaci。
Důvod chyby: V hibernaci jsou ve stejné relaci dvě identické identity, ale různé entity.
Řešení 1: session.clean()
PS: Pokud provedete operace ke změně datového stavu, například saveOrUpdate(object) po čisté operaci, můžete obdržet výjimku "Našla jsem dvě reprezentace stejné kolekce".
Řešení 2: session.refresh(object)
PS: Pokud objekt není objektem s daty v databázi, nemůžete použít session.refresh(object), protože metoda je obnovit objekt z hibernace session; pokud v session není žádný objekt, bude nahlášena chyba, takže je potřeba posoudit před použitím saveOrUpdate(object).
Řešení 3: session.merge(object)
PS: Doporučuje se vlastní metoda Hibernate.
2、Nalezena dvě zobrazení stejné sbírky
Příčina chyby: Viz 1.
Řešení: session.merge(object)
Výše uvedené dvě anomálie se často objevují při mapování jedna-na-mnoho a mnoho-na-mnoho.




Chyba způsobuje:

Mýtus:Nemůžete vytvořit nový uživatelský objekt a pak získat uživatelské informace na základě uživatelského ID a přiřadit je tomuto objektu, takže jiný objekt se stejnou identifikační hodnotou už byl přiřazen k chybě relace!!





Předchozí:Použití dynamického jazyka v C# 4.0
Další:Klonování mělké replikace objektů v C#
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com