Jpa JPQL通过在子句中传递ID对实体进行排序

Jpa JPQL通过在子句中传递ID对实体进行排序,jpa,spring-data-jpa,spring-data,hql,jpql,Jpa,Spring Data Jpa,Spring Data,Hql,Jpql,是否可以通过我在spring数据存储库中作为参数传递给IN子句的ID对实体进行排序 例如: SELECT e FROM Employee WHERE e.id IN (:employeeIds); 雇员ID={1,2,3,4,5} 我的清单和JPARepository的结果将是相同的顺序: Employee={id:1, ...}, Employee={id:2, ...}, Employee={id:3, ...} 根据您使用的数据库,您可以从传递的数组创建一个表,并将实体连接到is,如下

是否可以通过我在spring数据存储库中作为参数传递给IN子句的ID对实体进行排序

例如:

SELECT e FROM Employee WHERE e.id IN (:employeeIds);
雇员ID={1,2,3,4,5}

我的清单和JPARepository的结果将是相同的顺序:

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

根据您使用的数据库,您可以从传递的数组创建一个表,并将实体连接到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参数(可能在循环中)。

根据您使用的数据库,您可以从传递的数组创建一个表并将实体连接到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参数(可能在循环中)。

这是一个很好的问题。你知道吗,如果纯sql有可能的话?@Andronicus我不知道。我在第一次解决这个问题时,我需要确保我在Java中没有后处理的顺序,这个问题是否仍然有效?这是一个很好的问题。你知道吗,如果纯sql有可能的话?@Andronicus我不知道。我在第一次解决这个问题时,我需要确保我在Java中没有后处理的顺序,这个问题仍然有效吗?