検索

13.4.12. 動的インスタンス化について

download PDF
select 句でのみ有効な特定の式タイプがあります。Hibernate では、これを「動的なインスタンス化 (dynamic instantiation)」と呼びます。JPQL はこの機能の一部に対応しており、これを「コンストラクト式 (constructor expression)」と呼びます。

例13.11 動的インスタンス化の例 - コンストラクター

select new Family( mother, mate, offspr )
from DomesticCat as mother
    join mother.mate as mate
    left join mother.kittens as offspr
ここでは Object[] を扱うのではなく、クエリーの結果として返される型安全な java オブジェクトの値をラップします。クラス参照は完全修飾する必要があり、一致するコンストラクターが必要です。
ここのクラスはマッピングする必要はありません。エンティティーを表す場合、生成されるインスタンスは NEW 状態 (管理されない) で返されます。
これは JPQL もサポートします。HQL は、追加の「動的なインスタンス化」機能に対応しています。まず、クエリーはスカラー結果に対して Object[] ではなく List を返すように指定できます。

例13.12 動的インスタンス化の例 - リスト

select new list(mother, offspr, mate.name)
from DomesticCat as mother
    inner join mother.mate as mate
    left outer join mother.kittens as offspr
このクエリーの結果は List<Object[]> ではなく List<List> になります。
HQL は、マップでのスカラー結果のラッピングもサポートします。

例13.13 動的インスタンス化の例 - マップ

select new map( mother as mother, offspr as offspr, mate as mate )
from DomesticCat as mother
    inner join mother.mate as mate
    left outer join mother.kittens as offspr

select new map( max(c.bodyWeight) as max, min(c.bodyWeight) as min, count(*) as n )
from Cat cxt
このクエリーの結果は List<Object[]> ではなく List<Map<String,Object>> になります。マップのキーは、選択式に対して提供されたエイリアスによって定義されます。
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.