22.4. カスケードと unsaved-value


Parent が、ある Session でロードされ、 UI のアクションで何らかの変更が加えられ、update() を呼んでこの変更を新しいセッションで永続化したいとします。Parent が子のコレクションを持ち、カスケード更新が有効になっているため、 Hibernate はどの子が新しくインスタンス化されたか、どれがデータベースの既存の行に相当するのかを知る必要があります。ParentChild の両方が Long 型の識別プロパティを生成したとします。Hibernate はどの子が新しいものかを決定するために識別プロパティの値を使います ( 「自動的な状態検出」 を参照してください)。Hibernate3 では、もはやunsaved-valueを明示的に特定する必要がなくなりました。
以下のコードは parentchild を更新し、 newChild を挿入します:
//parent and child were both loaded in a previous session
parent.addChild(child);
Child newChild = new Child();
parent.addChild(newChild);
session.update(parent);
session.flush();
Copy to Clipboard Toggle word wrap
これらは生成された識別子の場合には非常に良いのですが、割り当てられた識別子と複合識別子の場合はどうでしょうか?これは Hibernate が、ユーザーにより割り当てられた識別子を持つ新しくインスタンス化されたオブジェクトと、以前の Session でロードされたオブジェクトを区別できないため、さらに難しくなっています。この場合、Hibernate はタイムスタンプかバージョンのプロパティのどちらを使うか、二次キャッシュに問い合わせます。最悪の場合、行が存在するかどうかデータベースを見ます。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat