JP One / Criteria API订单由MAX OneToMany关联

时间:2013-05-06 16:50:18

标签: sql-order-by one-to-many jpql criteria-api

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

    ...
}

我想根据最新订单日期列出前10名客户。因此,在最近日期下订单的客户应该出现在列表顶部,依此类推。

是否可以使用单个JPQL或Criteria API执行此操作?

1 个答案:

答案 0 :(得分: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,您不必担心这一点。