6

私は2つのエンティティを持っています:

@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;
...

JPQL では、CustomerOrder.cost>1000 の顧客を返したいと考えています。たとえば、A、B、C の 3 人の顧客がいるとします。A には、それぞれコストが 1000 と 2000 の 2 つの注文があります。B には、コストがそれぞれ 2000、3000、500 の 3 つの注文があります。C には、cost=500 の注文が 1 つあります。ここで、3 人の顧客を取得したいと考えています。A は、cost=2000 の注文のみを返します。B は 2000 と 3000 の注文を返します。C は空の注文コレクションを返します。

ただし、次の場合は常に完全なコレクションが返されます。

select c from Customer c, in(c.customerOrders) o where o.cost>1000

特にJPQLまたはHibernateでそれを行うにはどうすればよいですか?

4

3 に答える 3

2

これを試して

select c from Customer c join CustomerOrder o with o.cost > 1000

コストが 1000 を超える 2 つの注文がある場合、顧客を 2 回返す可能性があります。

select c from Customer c join CustomerOrder o with o.cost > 1000
group by c
于 2012-11-22T15:25:57.347 に答える
0

そこに OneToMany 関係を持たせるのは (パフォーマンス的に) 悪い考えのように思えます。

しかし、なぜこれがうまくいかないselect o from CustomerOrder o where o.cost > 1000;のでしょうか?結果リストから顧客を抽出しますか?

于 2012-05-23T08:52:57.880 に答える