【问题标题】:JPA sorting query by property of last element in child collectionJPA按子集合中最后一个元素的属性排序查询
【发布时间】:2013-03-25 22:27:48
【问题描述】:

假设我有以下实体

class Order {

    @Id
    private long id;

    private long orderNo;

    @OneToMany
    @JoinColumn(name="order_id")
    @OrderBy("timeStamp ASC")
    private List<Item> items;
}

class Item {
    @Id
    private long id;

    // e.g. COMPLETED, IN PROGRESS, QUEUED, etc...
    private String status;

    private long timeStamp;

    @ManyToOne
    private Order order;
}

使用 JPA,我想返回一个订单列表,这些订单按项目列表中最后一个项目的状态排序,这是最新的,因为项目是按时间戳排序的。如何做到这一点?

【问题讨论】:

  • 我强烈怀疑这不能在 JPQL 查询中完成。如果我是你,我要么将最近的商品时间戳存储在 Order 实体中并按其排序(记得保持更新),要么实现自定义 Comparator&lt;Order&gt; 并使用 Collections.sort(在 Java 代码中排序,而不是在 JQPL 查询中)。

标签: java jpa


【解决方案1】:

类似的,

Select o from Order o join o.items i where i.id = (Select max(timestamp) from Item i2 where i = i2) order by i.status

【讨论】:

    猜你喜欢
    • 2018-05-11
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    • 2015-03-16
    • 1970-01-01
    • 2018-10-08
    • 1970-01-01
    • 2012-06-14
    相关资源
    最近更新 更多