3

我有以下数据模型:与订单有 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);

以及关于您编写​​的内容和代码的一些建议:

  • 避免渴望。JPA 中的每个 *ToOne 关系都会进行一次 EAGER 获取。如果可能的话,将 fetchType 更改为 LAZY。
  • 本机查询仅在最后一种情况下。在特定情况下,它们非常有用。但是,做一个简单的查询,如果你想同时使用多个数据库(集成测试的常见场景),你会受到限制。例如,为了进行这个限制信息量的简单查询,每个数据库都使用不同的方式来完成此操作(limitrownumtop等)。使用 HQL / Criteria,您不必担心这一点。
于 2015-08-19T10:27:04.153 回答