この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 21246|答える: 0

[出典] 同じ識別子値を持つ別のオブジェクトはすでに...

[リンクをコピー]
掲載地 2016/07/01 10:48:52 | | | |
同じ識別子値を持つ別のオブジェクトがすでにセッションに関連付けられていました:398fdbba-57b8-4d3d-b84b-4c0c0b497f02、エンティティ:XXX



このエラーは合計で2回遭遇しましたが、良い解決策は見つかっていません。そしてこのエラーが起きました

その理由はおそらくよく知られているでしょう。なぜなら、ハイバネイトでは同じセッション内に同じロゴが2つあるからです

しかし、別のエンティティの場合は、saveOrUpdate(object)操作を実行する際にこのエラーが報告されます。

へへ、もしかしたら言うかもしれませんが、言うことと言わないことに違いはないと認めるでしょう、詳しいことは知りません

なぜこのエラーが起きたのか、そうでなければ長い間解決されなかったでしょう。今、一時的なものを挙げてください

解決策は、根本原因を見つけられない私のような人に、実行を続ける方法を提供することです

(もちろん正しいですが、原因から始まるわけではありません)
    実際、この問題は非常に簡単に解決できます。session.clean() 操作を実行するだけです

しかし、クリーン操作の後にsaveOrUpdate(object)操作を実行したことは可能です

「同じコレクションの2つの表現を見つけた」と、多くの情報を調べました。

良い説明はなく、この記事が最も助けになっている

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

最後に、session.refresh(object)メソッドで解決できますが、オブジェクトが

データベースにデータがあるオブジェクトの場合、session.refresh(object)ファクターは使えません

リフレッシュは、セッションにオブジェクトがない場合に休止セッションからオブジェクトを再取得することです

もしこのオブジェクトがあればエラーが報告されるので、saveOrUpdate(object)を使う前に判断する必要があります。

壊せ

    もちろん、この問題に対する最も簡単な解決策はHibernateに付属しているmerge()を使うことです。

方法。 しかし、問題に直面したときは、このソフトウェアに付随する非常に便利な方法を使うことが多いと感じています

(saveOrUpdate()、save()、update()と比べて非常に不快に感じます。
    後になって、このエラーは1対多のマッピングや多対多数のマッピングでよく見られました。どうかここにいます

1対多や多対多のマッピングを使う際は注意が必要です
休止状態のトラブルシューティングと取り扱い
1、同じ識別子値を持つ別のオブジェクトがすでにセッションに関連付けられていました。
エラーの理由:ハイバネートでは、同じセッション内に2つの同一のアイデンティティが存在するが、異なるエンティティが存在する。
作業回避策1:session.clean()
追伸:クリーン操作後にsaveOrUpdate(object)のようなデータ状態を変更する操作を行うと、「同じコレクションの2つの表現を見つけました」という例外が出る場合があります。
回避策2:session.refresh(object)
追伸:オブジェクトがデータベースにデータを持つオブジェクトでない場合は、セッション.refresh(object)を使うことはできません。なぜなら、そのメソッドはハイバネートセッションからオブジェクトを再取得するものだからです。セッションにオブジェクトがなければエラーが報告されるため、saveOrUpdate(object)を使う前に判断する必要があります。
解決策3:session.merge(object)
追伸:Hibernate独自の方法を推奨します。
2、同じ集合の2つの表現を見つけた
エラーの原因:参照1。
回避策:session.merge(object)
上記の2つの異常は、1対多写像や多対多写像でよく現れます




エラーの原因:

誤解:新しいユーザーオブジェクトを作成して、ユーザーIDに基づいてユーザー情報を取得してこのオブジェクトに割り当てることはできません。そうすると、同じ識別子値の別のオブジェクトがすでにセッションエラーに関連付けられているわけではありません!!





先の:C# 4.0におけるダイナミックの利用
次に:C#オブジェクトの浅い複製のクローン
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com