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。 仅在最后一种情况下进行本机查询。在特定情况下,它们非常有用。但是,做一个简单的查询,如果你想同时使用多个数据库(集成测试的常见场景),你会受到限制。例如,为了进行这个限制信息量的简单查询,每个数据库使用不同的方式来完成此操作(limit
、rownum
、top
等)。使用 HQL / Criteria,您不必担心这一点。
【讨论】:
以上是关于JPQL / Criteria API Order By MAX OneToMany 关联的主要内容,如果未能解决你的问题,请参考以下文章