我有一個單向一對多關係的類別如下:休眠 - HQL來從單向一對多關係的集合
public class Order {
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name="order_item", joinColumns={@JoinColumn(name="order_id")}, inverseJoinColumns={@JoinColumn(name="item_id")})
public Set<Item> getItems() {
return items;
}
}
通常得到這個訂單的內容很簡單:
List<Item> items = order.getItems();
但無論出於何種原因,我可能希望以某種方式過濾我的結果,並以最快的方式檢索僅某個項目集合的一部分,例如所有商品超過特定價格,低於特定庫存等(不返回全部然後過濾)。爲此,我將運行HQL查詢以檢索特定訂單的項目,並將更多內容添加到我的where子句或我的查詢對象中。
憑直覺我想這種行爲(這是完全錯誤的):
SELECT jointable.ITEM from order_item as jointable inner join jointable.order where order = :order
但是,當然,這是錯誤的,因爲HQL工作在映射實體方面,所以我不能在查詢中使用的連接表。那麼做到這一點的正確方法是什麼?
編輯:
我發現這個問題,我想下面的查詢答案:
Select o.items from Order o where o = ?
這讓我去取物品訂單的集合,而不必使用雙向關係。我現在可是對這個問題的第二階段,這是如何篩選這個集合的結果混爲一談,最簡單的例子是:
Select o.items from Order o where o = ? order by o.items.somenumberfield asc
它返回非法企圖取消引用集合,那麼我將如何過濾我的物品?
編輯:
票證解決方案實際上是正確的,我本來誤解了解決方案。
感謝您的幫助,請參閱我的編輯 – mogronalol