您必須手動將對錶b的訪問添加到select中,就像在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);
休眠不會產生該訪問自動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語句。
它不是很工作。 A和B被映射。 A級定義: 所以我有一個單獨的表(a_b)映射a和b之間的關係。 我需要選擇新的A(),我不能使用select * from A嗎? 非常感謝您的建議。 –
Nes
哦,我忘記提到我的數據庫是MySQL。 – Nes
如果您選擇了新的A(a.key,a.col2,...),那麼您將得到一個A實例列表。如果您選擇了a.key,col2,...,那麼您會得到對象數組列表。兩者都是可能的,我的代碼更多的是一個例子。但是你不能在HQL中選擇A. *',並且它不能在組中使用(至少在Oracle中)。 - 你的意思是「不太有效」,究竟哪個不起作用(哪個錯誤信息或哪個錯誤結果)? - 你真的有很多tomany的關係嗎?在你的例子中,它也可以是一對多的,這更容易處理。 – Johanna