Tôi có một lớp với một một chiều với nhiều mối quan hệ như sau:Hibernate - HQL để lấy một bộ sưu tập từ mối quan hệ Unidirectional OneToMany
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;
}
}
thường nhận được các nội dung của lệnh này là đơn giản:
List<Item> items = order.getItems();
Nhưng vì lý do nào đó tôi có thể muốn lọc kết quả theo cách nào đó và chỉ lấy một phần của một tập hợp các mặt hàng như tất cả các mặt hàng hơn một mức giá nhất định, dưới một số cổ phiếu nhất định. sau đó lọc sau đó). Để làm điều này tôi sẽ chạy một truy vấn HQL để lấy các mục cho một thứ tự cụ thể và thêm một số thứ khác vào mệnh đề where của tôi hoặc vào đối tượng truy vấn của tôi.
trực giác tôi muốn hành vi này (Đó là hoàn toàn sai):
SELECT jointable.ITEM from order_item as jointable inner join jointable.order where order = :order
Nhưng tất nhiên điều này là sai như HQL làm việc trong điều kiện của đơn vị lập bản đồ, vì vậy tôi không thể sử dụng bảng tham gia truy vấn. Vì vậy, cách chính xác để làm điều này là gì?
Edit:
Tôi đã tìm thấy câu trả lời cho câu hỏi này, tôi muốn các truy vấn sau đây:
Select o.items from Order o where o = ?
này cho phép tôi để lấy bộ sưu tập các mặt hàng cho một trật tự, mà không cần phải sử dụng mối quan hệ hai chiều. Tôi hiện nay tuy nhiên bối rối trên sân khấu thứ hai của câu hỏi này, đó là làm thế nào để lọc các kết quả của bộ sưu tập này, các ví dụ đơn giản nhất là:
Select o.items from Order o where o = ? order by o.items.somenumberfield asc
nào trả về nỗ lực bất hợp pháp vào bộ sưu tập dereference, vì vậy làm thế nào tôi sẽ lọc những đồ của tôi?
Edit:
Các giải pháp vé thực sự là đúng, tôi không nhận định các giải pháp ban đầu.
cảm ơn sự giúp đỡ của bạn, hãy xem chỉnh sửa của tôi – mogronalol