Tôi có hai thực thể:Làm cách nào để lọc bộ sưu tập trong JPA/JPQL?
@Entity
public class Customer implements java.io.Serializable {
...
@OneToMany(fetch=FetchType.EAGER, mappedBy="customer")
private Set<CustomerOrder> customerOrders;
...
@Entity
public class CustomerOrder implements java.io.Serializable {
....
private double cost;
@ManyToOne
@JoinColumn(name="CUST_ID")
public Customer customer;
...
Bây giờ trong JPQL của tôi, tôi muốn quay trở lại những khách hàng với CustomerOrder.cost họ> 1000. Ví dụ, có ba khách hàng A, B và C. A có hai đơn đặt hàng với chi phí = 1000 và 2000 tương ứng. B có ba đơn đặt hàng với chi phí = 2000,3000 và 500 tương ứng. C có một đơn đặt hàng với chi phí = 500. Bây giờ tôi muốn có được ba khách hàng: A trả lại các đơn đặt hàng với chi phí = 2000 chỉ; B trả về các lệnh với 2000 và 3000; C trả về một bộ sưu tập đơn đặt hàng trống.
Nhưng sau đây sẽ luôn luôn trở lại đầy đủ bộ sưu tập:
select c from Customer c, in(c.customerOrders) o where o.cost>1000
Làm thế nào tôi có thể làm điều đó trong JPQL hoặc Hibernate đặc biệt?
jscoot nói nó sẽ trả về tất cả các hàng , vì vậy truy vấn đầu tiên của bạn có thể không tương đương với truy vấn của anh vì C chỉ có một đơn đặt hàng và chi phí của nó là <1000. –