使用ORDER BY对端点中的值进行排序的java查询
关于我的问题,我已经听取了本网站帖子的建议,但我认为我的方向不对。我正在努力解决的问题是使用jpql提供一种排序方法,可以使用下表演示:
Name | Address | City |
--------------------------
A | A | C |
C | B | B |
B | C | A |
我希望这样,当我传入一个列的名称时,我将能够按列排序所有行的结果。例如,如果我按名称订购,那么它应该返回一个bc而不是一个cb
我的目标是,当我为我的API传入一个参数时:
http://localhost:8080/api/person?sorting=city
现在我了解到,这可以通过以下方式解决:
http://localhost:8080/api/person?sort=city,asc
但是,我无法在这种情况下使用sort参数,因为我依赖于来自多个域的信息。因此,我决定看看是否有可能在我的存储库中创建一个查询,用于对值进行排序。这是我迄今为止的尝试:
@Query("SELECT p FROM DePerson p, DeClass c, DeSchool s" +
"WHERE p.personId = c.id " +
"AND su.schoolId = s.id " +
"ORDER BY :ordering")
List<DePerson> sortingAll(String sorting);
有了这些,我试图看看我是否能够从我的存储库中传入这个查询,并在我的服务方法中使用它作为传递端点时的结果排序方法:
List<PersonDTO> result = new ArrayList<>();
Page<DePerson> page;
List<DePerson> personList = page.getContent();
for (DePerson person: personList) {
result.add(convertDTO(person));
}
return new PageImpl<>(result, pageable, page.getTotalElements());
最后,我尝试使用jpql创建一个自定义排序参数,当调用端点时,该参数应该应用于结果
# 1 楼答案
对于动态查询,建议使用criteria API,以便实现您的目标
首先在PersonRepository和autowired Entity Manager中添加一个实现,以实现类似的功能
然后,形成您的服务或控制器,您可以自动连接此存储库,您将获得所需的行为