11.3. オブジェクトのロード


永続化されたインスタンスの識別子があらかじめ分かっているなら、 Sessionload() メソッドを使って取得する手段があります。load() は、Class オブジェクトをとり、永続状態にあるそのクラスのインスタンスを新たに生成し、状態をロードします。
Cat fritz = (Cat) sess.load(Cat.class, generatedId);
Copy to Clipboard Toggle word wrap
// you need to wrap primitive identifiers
long id = 1234;
DomesticCat pk = (DomesticCat) sess.load( DomesticCat.class, new Long(id) );
Copy to Clipboard Toggle word wrap
あるいは、以下のように、既存のインスタンスに状態をロードすることもできます:
Cat cat = new DomesticCat();
// load pk's state into cat
sess.load( cat, new Long(pkId) );
Set kittens = cat.getKittens();
Copy to Clipboard Toggle word wrap
DB に該当する行が無い場合、load() は回復不可能な例外を投げることに注意しましょう。そのクラスがプロキシを使ってマッピングされている場合、 load() は初期化されていないプロキシを返し、プロキシのメソッドが呼ばれるまで実際にはデータベースにアクセスしません。実際にデータベースからロードせずに、オブジェクトに対する関連を作りたい場合、この振る舞いはとても役立ちます。batch-size がクラスマッピングに定義されている場合、複数のインスタンスを一括でロードすることが可能です。
該当する行が存在することを確信できない場合は、データベースにすぐにアクセスし該当する行が無いと null を返すget() メソッドを使うべきです。
Cat cat = (Cat) sess.get(Cat.class, id);
if (cat==null) {
    cat = new Cat();
}
return cat;
Copy to Clipboard Toggle word wrap
LockMode を使えば、SELECT ... FOR UPDATE という SQL を使ってオブジェクトをロードすることができます。詳細な情報は、API ドキュメントを参照してください。
Cat cat = (Cat) sess.get(Cat.class, id, LockMode.UPGRADE);
Copy to Clipboard Toggle word wrap
関連に対するカスケードスタイルとして lockall を指定しない限り、関連するインスタンスや包含するコレクションは FOR UPDATE で選択されません
refresh() メソッドを使うことで、どんなときでも、オブジェクトやそのコレクションをリロードすることができます。データベースのトリガがテーブルを更新した際に、そのテーブルに対応するオブジェクトのプロパティを同期する場合、このメソッドが役に立ちます。
sess.save(cat);
sess.flush(); //force the SQL INSERT
sess.refresh(cat); //re-read the state (after the trigger executes)
Copy to Clipboard Toggle word wrap
Hibernate がデータベースから、どのくらいの量をロードするのでしょうか?またどのくらいの数の SQL の SELECT 文が使われるのでしょうか?これは、フェッチの戦略 によります。これについては、「フェッチ戦略」で説明しています。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat