SQL の場合と同様に、テーブル b へのアクセスを選択に手動で追加する必要があります。SQLでは、次のことができます
select a.key, a.col2, a.col3, ... from a, b
where a.key = b.foreignKeyFromA
group by a.key, a.col2, a.col3, ...
order by sum(b.rank);
Hibernate は B へのこのアクセスを自動的に生成しないため、次のような HQL ステートメントで手動で実装する必要があります。
select new A(a.key, a.col2, a.col3, ...) from A a join B b
group by a.key, a.col2, a.col3, ...
order by sum(b.rank)
(A の適切なコンストラクターが必要です。または、単一の値を持つオブジェクトの配列を取得できます。A と B の間の関係は、マッピングで定義する必要があります。おそらく、これは既に当てはまります。)
注: group by 句では、選択したすべての列を指定する必要があります。グループ化が変更されない場合でも (キーは既に一意です)。選択したすべての列を指定しないと、Oracle データベースでエラーが発生します。MySQL はこれを必要としません。これでgroup by a.key十分ですが、主にすべてのデータベースで機能する HQL ステートメントを作成する必要があります。