我有一個訂單實體(即,表示訂單),並且每個訂單都有一組DeliveryDates。 我試圖實現一個搜索功能,並在JFace TableViewer中顯示結果。具有一對多關聯的休眠條件
我希望對於每個具有多個交貨日期的訂單,它應該在表中進行復制,但DeliveryDate列將顯示此實例的特定交貨日期。
這個查詢很容易在SQL中用一個簡單的連接完成,並且每行的行重複的日期都不同。 由於我正在執行搜索功能,因此我正在逐步構建查詢(取決於用戶選擇的搜索參數),因此使用Criteria構建查詢非常有用。問題是,我得到的結果列表是重複的(這是OK),但每個實體只包含相同的一組DeliveryDates - 所以我無法爲同一Order的不同行打印不同的日期。
有沒有辦法使用Critera來做到這一點?如果不是,我該怎麼辦?
編輯:編輯:例如,這個HQL查詢似乎做同樣的事情: 「從訂單選擇dd.deliveryDate,OD爲OD左連接od.deliveryDates DD」
答: 我已經找到了解決辦法:
Criteria crit = session.createCriteria(Order.class)
.createAlias("deliveryDates", "dd")
.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
我給deliveryDates收集的別名,用於使用ResultTransformer爲了在地圖返回結果。搜索結果列表將包含具有兩個鍵「this」(又名Criteria.ROOT_ALIAS)和「dd」的地圖。這將使我行的重複,我想,現在我可以抓住這樣相應的對象:
Map map = (Map) element;
Order ord = (Order) map.get(Criteria.ROOT_ALIAS);
DeliveryDate dd = (DeliveryDate) map.get("dd");
感謝您的回覆。我可以在HQL中做類似的事情,例如:「select dd.deliveryDate,od from order as od join join od.deliveryDates dd」。這似乎會返回重複項(如我所願),並且對於每一行deliveryDate都是不同的。問題是我正在做一個搜索窗口,用戶可以自由選擇搜索參數,並且使用Criteria可以更容易地構建查詢(所以我不會過濾他沒有問過的列對於)。所以基本上,我希望Criteria查詢返回的不僅僅是Order對象,我希望每個重複的Order都有不同的日期。 – Caleb
我明白.. HQL是一個建議(並不是說標準不能完成這項工作)..重複條目的問題的原因是主鍵..請做點什麼。 –
感謝您的幫助,我找到了解決方案(我編輯了我的原始文章以顯示它)。 – Caleb