【问题标题】:JPQL / Criteria API Order By MAX OneToMany associationJPQL / Criteria API Order By MAX OneToMany 关联
【发布时间】: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 方法来解决这个问题。不确定这是否是最好的方法,但考虑到这种情况,它绝对是一种可行的方法。

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


【解决方案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,您不必担心这一点。

【讨论】:

    猜你喜欢
    • 2010-12-19
    • 2016-03-09
    • 2020-02-18
    • 1970-01-01
    • 2013-11-11
    • 1970-01-01
    • 2013-11-02
    • 2016-10-31
    • 1970-01-01
    相关资源
    最近更新 更多