【问题标题】:JPA Criteria Query, ordering the result using a list of ordered idsJPA Criteria Query,使用有序 id 列表对结果进行排序
【发布时间】:2018-08-27 03:13:51
【问题描述】:

假设我的数据库中有一个“Item”表,而我的 Java 代码 JPA 映射中有一个“Item”实体对象。

我得到了一个“项目”ID 的排序列表,我想从数据库中检索实际的“项目”,其排序与给定列表中的排序相同。

现在我真的不能只是先检索商品然后订购它们,因为我只想在订购后从数据库中检索这些商品的一小部分。

这可能吗?我知道有一些方法可以使用纯 SQL 来做到这一点,例如

Ordering by the order of values in a SQL IN() clause

ORDER BY the IN value list

【问题讨论】:

    标签: sql jpa criteria criteria-api


    【解决方案1】:

    我通常将此技术称为"sort indirection",您可以根据另一个预先排序的数据集对数据集进行排序。在 SQL 中,您可以在 MySQL 中使用 FIELD() 函数(根据您链接的问题),或者在更标准的 SQL 中,您可以使用类似:

    ORDER BY 
      CASE value WHEN 3 THEN 1
                 WHEN 5 THEN 2
                 WHEN 1 THEN 3
                        ELSE 4 END,
      secondary_criteria
    

    这将产生按[3, 5, 1, ...]排序的值

    现在,CASE 也可以使用条件 API 执行:

    cb.selectCase()
      .when(..., ...)
      .when(..., ...)
      .when(..., ...)
      .otherwise(...)
    

    【讨论】:

      猜你喜欢
      • 2013-08-25
      • 2017-05-02
      • 2015-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-28
      • 1970-01-01
      相关资源
      最近更新 更多