15.3. 関連と結合


関連するエンティティあるいは値コレクションの要素にも、join を使って別名を割り当てることが出来ます。例えば、
from Cat as cat
    inner join cat.mate as mate
    left outer join cat.kittens as kitten
Copy to Clipboard Toggle word wrap
from Cat as cat left join cat.mate.kittens as kittens
Copy to Clipboard Toggle word wrap
from Formula form full join form.parameter param
Copy to Clipboard Toggle word wrap
サポートしている結合のタイプは ANSI SQL から採っています:
  • inner join
  • left outer join
  • right outer join
  • full join (たいていの場合使いづらい)
inner joinleft outer joinright outer join には省略形を使うこともできます。
from Cat as cat
    join cat.mate as mate
    left join cat.kittens as kitten
Copy to Clipboard Toggle word wrap
HQL の with キーワードを使うと、結合条件を付け加えることができます。
from Cat as cat
    left join cat.kittens as kitten
        with kitten.bodyWeight > 10.0
Copy to Clipboard Toggle word wrap
「フェッチ」結合は関連や値のコレクションを親オブジェクトと一緒に1度の select で初期化します。これは特にコレクションの場合に有用です。また、効果的に関連とコレクションに対し、マッピングファイルの外部結合や遅延宣言をオーバーライドします。詳細は 「フェッチ戦略」 を参照してください。
from Cat as cat
    inner join fetch cat.mate
    left join fetch cat.kittens
Copy to Clipboard Toggle word wrap
関連オブジェクトを where 節 (または他のどんな節でも) で使うべきではないため、フェッチ結合には通常別名を割り当てる必要がありません。また関連オブジェクトはクエリ結果として直接返されません。代わりに親オブジェクトからアクセスできます。別名が必要となる唯一の理由として、さらにコレクションを再帰的に結合フェッチする場合というのが挙げられます:
from Cat as cat
    inner join fetch cat.mate
    left join fetch cat.kittens child
    left join fetch child.kittens
Copy to Clipboard Toggle word wrap

重要

iterate()を使って呼び出したクエリにて、fetchコンストラクトを利用することはできません (ただし、scroll() は利用可)。Fetch は、setMaxResults() あるいは setFirstResult()とともに利用するべきではありません。理由は、通常即時コレクションフェッチ向けに重複を含む結果行にこれらの操作が基づいており、行数が得られるとは考えられないからです。また、Fetch は、即興のwith 条件とともに利用すべきではありません。1つのクエリで複数のコレクションを join fetchすることで、デカルト積を作成することも可能なため、このような場合は注意してください。複数のコレクションの役割を join fetchすると、bag マッピングに対して予期せぬ結果を生み出す可能性があるため、この場合クエリを編成するときはユーザーの裁量で行ってください。最後にfull join fetchright join fetch は意味がないという点にも注意してください。
プロパティレベルの遅延フェッチを使う場合(バイトコード処理をする場合)、fetch all properties を使うことで Hibernate に遅延プロパティを速やかに最初のクエリでフェッチさせることができます。
from Document fetch all properties order by name
Copy to Clipboard Toggle word wrap
from Document doc fetch all properties where lower(doc.name) like '%cats%'
Copy to Clipboard Toggle word wrap
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat