我在父實體和子實體之間有一對多映射。現在我需要找到父母名單中與每位父母關聯的子女人數。我正在嘗試使用HQL來做到這一點,但我不知道如何才能在那裏獲得父母名單。另外,我不知道如何返回實體本身,而不僅僅是它的ID。我目前的HQL查詢是:通過HQL獲得兒童數量
select new map(parent.id as parentId, count(*) as childCount)
from Parent parent left join parent.children children
group by parent.id
但這隻會返回ID並且不會篩選特定的父項。
編輯 基於帕斯卡的答案,我已經修改了查詢
select new map(parent as parent, count(elements(parent.children)) as childCount)
from Parent parent
group by parent
也沒有工作,但過於緩慢:30秒,而不是400毫秒的同一個數據庫。
事實上,這是可怕的慢。實際上難以接受... – 2010-01-29 16:32:24
索引可能(強調可能)有助於提高速度,但另一種選擇是將hql查詢分解爲若干部分(如果可以的話) - 我發現有時可以提供幫助。或者你可以爲每個父元素執行單獨的查詢,並自己創建地圖。一個好的數據庫分析器可能有助於探索。 – aperkins 2010-01-29 20:37:14
我最終選擇的解決方案是首先從數據庫中檢索所有父項,然後運行查詢,該查詢給出了父項ID和計數,然後使用Java合併兩項。無論如何,我必須得到所有的父母,並且將這份名單與孩子數量合併的時間不到一秒鐘,在這種情況下沒有問題。 – 2010-01-30 15:57:28