【问题标题】:JPQL order entities by passed IDs to IN clause通过将 ID 传递给 IN 子句的 JPQL 订单实体
【发布时间】:2019-09-19 10:12:18
【问题描述】:

我作为参数传递给带有 Spring 数据存储库的 IN 子句的 ID 是否可以订购实体?

例如:

SELECT e FROM Employee WHERE e.id IN (:employeeIds);

和employeeIds = {1,2,3,4,5}

我的 JPARepository 结果列表将是实体的顺序相同:

Employee={id:1, ...}, Employee={id:2, ...}, Employee={id:3, ...}

【问题讨论】:

  • 这是一个很好的问题。你知道,如果用纯 sql 可能吗?
  • @Andronicus 我不知道。我第一次解决这个问题,我需要确保我有没有在java中进行后处理的顺序
  • 这个问题还有效吗?

标签: jpa spring-data-jpa spring-data hql jpql


【解决方案1】:

根据您使用的数据库,您可以从传递的数组创建一个表并将实体连接到 is,类似这样:

select e
from (values (1), (2), (3), ...) as t(id)
inner join employee e on t.id = e.id;

这可以被评估为原生查询:

entityManager.createNativeQuery(
    "select e " +
    "from (values (1), (2), (3), ...) as t(id) " +
    "inner join employee e on t.id = e.id", Employee.class)
    .gerResultList();

但正如您所见,您必须自己编写查询或传递大量 od 参数(可能在循环中)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-13
    • 2015-08-13
    • 2015-03-07
    • 1970-01-01
    • 2018-06-18
    • 1970-01-01
    • 2012-10-18
    • 2020-04-23
    相关资源
    最近更新 更多