3

私は次のデータ モデルを持っています: Order と OneToMany の関係を持つ顧客。

@Entity
public class Customer{
    ...

    private Long id;

    @OneToMany
    private Collection<Order> orders;

    ...
}


@Entity
public class Order{
    ...
    private Long id;

    private Date orderDate;

    @ManyToOne
    private Customer customer;

    ...
}

最新の orderDate に基づいて、上位 10 人の顧客を一覧表示したいと考えています。そのため、最新の日付に注文した顧客がリストの一番上に表示されます。

単一の JPQL または Criteria API を使用してこれを行うことは可能ですか?

4

1 に答える 1

0

HQL では:

Query query = session.createQuery("select Customer c JOIN c.orders order ORDER BY order.orderDate DESC")
query.setMaxResults(10);

そして、あなたが書いたものとあなたのコードに関するいくつかの提案:

  • EAGER は避けてください。JPA のすべての *ToOne 関係は、EAGER フェッチを行います。可能であれば、fetchType を LAZY に変更してください。
  • 最後のケースでのみネイティブ クエリ。特定のケースでは、それらは非常に便利です。ただし、単純なクエリを実行するために、一度に複数のデータベースを操作する場合は制限が生じます (統合テストの一般的なシナリオ)。たとえば、情報量を制限するこの単純なクエリを作成するために、各データベースはこれを達成するために異なる方法を使用します ( limitrownumtopなど)。HQL/Criteriaを使えばそんな心配はありません。
于 2015-08-19T10:27:04.153 に答える