Sql order by JPQL/Criteria API按MAX OneToMany协会排序

Sql order by JPQL/Criteria API按MAX OneToMany协会排序,sql-order-by,one-to-many,jpql,criteria-api,Sql Order By,One To Many,Jpql,Criteria Api,我有以下数据模型:与订单有一对一关系的客户 @Entity public class Customer{ ... private Long id; @OneToMany private Collection<Order> orders; ... } @Entity public class Order{ ... private Long id; private Date orderDate; @Ma

我有以下数据模型:与订单有一对一关系的客户

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

    ...
}
@实体
公共类客户{
...
私人长id;
@独身癖
私人托收令;
...
}
@实体
公共阶级秩序{
...
私人长id;
私有日期orderDate;
@许多酮
私人客户;
...
}
我想根据最新订单日期列出前10名客户。因此,在最新日期下订单的客户应出现在列表顶部,依此类推

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

在HQL中:

Query query = session.createQuery("select Customer c JOIN c.orders order ORDER BY order.orderDate DESC")
query.setMaxResults(10);
以及关于您编写的内容和代码的一些建议:

  • 避免急躁的情绪。JPA中的每一个*ToOne关系都会让人抓狂。如果可能的话,将fetchType更改为LAZY
  • 仅在最后一种情况下使用本机查询。在特定情况下,它们非常有用。但是,要进行一个简单的查询,如果希望同时使用多个数据库(集成测试的常见场景),则会受到限制。例如,为了进行这个限制信息量的简单查询,每个数据库都使用不同的方法来完成(
    limit
    rownum
    top
    ,等等)。使用HQL/Criteria,您不必担心这一点

只需提及:我最终使用JPA的原生SQL方法来解决这个问题。不确定这是否是最好的方法,但考虑到目前的情况,这肯定是可行的。