一般的に、あなたは正しいです-ドキュメントに記載されているように:
小引用:
... ただし、フェッチ戦略、つまり @Fetch を使用してデータをフェッチする方法を調整できます。FetchMode は、SELECT (関連付けを読み込む必要があるときに選択がトリガーされる) または JOIN (所有者エンティティを読み込むときに SQL JOIN を使用して関連付けを読み込む) にすることができます。JOIN は遅延属性をオーバーライドします(JOIN 戦略を介してロードされた関連付けは遅延することはできません)...
しかし、上記の参照された質問は、次のようにルート エンティティUSERを取得しています。
String hql = "from User ";
Query q = ses.createQuery(hql);
つまり、クエリを実行していますUser
。この場合、マッピングfetch="join"
は評価されません。
明示的な JOIN によってそれを行うことができます
ドキュメントの例:
from Cat as cat
join cat.mate as mate
left join cat.kittens as kitten
したがって、私たちの場合:
String hql = "from User as u join u.phones as p ";
Query q = ses.createQuery(hql);
最後に - マップされた設定fetch="join"
は、呼び出すたびに使用されます.get()
User user = session.get(id);