您必须将对表 b 的访问手动添加到选择中,就像在 SQL 中一样。在 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 语句。