JPQL / Criteria API Order By MAX OneToMany 关联

Posted

技术标签:

【中文标题】JPQL / Criteria API Order By MAX OneToMany 关联【英文标题】:JPQL / Criteria API Order By MAX OneToMany association 【发布时间】:2013-04-30 11:31:48 【问题描述】:

我有以下数据模型:Customer 与 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 来做到这一点?

【问题讨论】:

顺便提一下:我最终使用 JPA 的原生 SQL 方法来解决这个问题。不确定这是否是最好的方法,但考虑到这种情况,它绝对是一种可行的方法。 【参考方案1】:

在 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,您不必担心这一点。

【讨论】:

以上是关于JPQL / Criteria API Order By MAX OneToMany 关联的主要内容,如果未能解决你的问题,请参考以下文章

使用方法:JPQL或Criteria API? [关闭]

ORDER BY 使用 Criteria API

在 JPA Criteria API 的子查询中使用 ORDER BY 的替代方法是啥?

JPA Criteria builder IN 子句查询

JPA 多对多JPQL查询语句怎么写?

JPQL 中的 timestampdiff 等效项(不使用标准)